Ubuntu 16.04:无法添加LD_LIBRARY_PATH的路径

时间:2017-10-05 08:36:14

标签: c++ ubuntu-16.04

我想在编译应用程序时使用额外的库但是我无法将库目录的路径添加到LD_LIBRARY_PATH,因此构建系统找不到它:

我在一个包含/etc/ld.so.conf.d的新文件petsc.conf中添加了库目录/home/klaus/OpenFOAM/klaus-5.0/petsc-3.7.6/arch-linux2-c-debug/lib的路径

当我运行ldconfig -p时,找到了库,但它没有出现在LD_LIBRARY_PATH

我还添加了.bashrc

的路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/klaus/OpenFOAM/klaus-5.0/petsc-3.7.6/arch-linux2-c-debug/lib

采购它,后来重新启动,但是当我用

检查LD_LIBRARY_PATH

env | grep '^LD_LIBRARY_PATH'

该库仍未包含在内,我收到一个未找到(链接)的编译错误

LD_LIBRARY_PATH添加库的步骤之后需要做些什么?

2 个答案:

答案 0 :(得分:2)

LD_LIBRARY_PATH不会影响关联。加载时使用LD_LIBRARY_PATH来覆盖默认库搜索路径。您应该使用库的完整路径(例如g++ -l/path/to/mylib/lib_mylib.so ...)或提供​​搜索路径(例如g++ -L/path/to/mylib/

在运行时,使用LD_LIBRARY_PATH或链接-rpath选项(在链接时添加非默认库搜索路径)。

答案 1 :(得分:0)

假设我在文件名libfunc.so

中使用temp.c

man 3 dlopen

       dlclose, dlopen, dlmopen - open and close a shared object

SYNOPSIS
       #include <dlfcn.h>

       void *dlopen(const char *filename, int flags);

       int dlclose(void *handle);

       #define _GNU_SOURCE
       #include <dlfcn.h>

       void *dlmopen (Lmid_t lmid, const char *filename, int flags);

       Link with -ldl.

使用动态库的第一种方式(=直接告诉链接器):

ALP ❱ gcc temp.c -ldl
ALP ❱ ./a.out
libfunc.so: cannot open shared object file: No such file or directory
ALP ❱ pwd
/home/shu/codeblock/ALP
ALP ❱ gcc temp.c -ldl -Wl,-rpath,/home/shu/codeblock/ALP
ALP ❱ ./a.out
func1: 1
func2: upgrading to version 2

使用动态库的第二种方式(=使用环境变量LD_LIBRARY_PATH):

ALP ❱ export LD_LIBRARY_PATH=$PWD
ALP ❱ echo $LD_LIBRARY_PATH
/home/shu/codeblock/ALP
ALP ❱ ./a.out
func1: 1
func2: upgrading to version 2
ALP ❱ export LD_LIBRARY_PATH=
ALP ❱ ./a.out
libfunc.so: cannot open shared object file: No such file or directory

使用动态库的第三种方式(=将其复制到标准路径):

ALP $ sudo cp libfunc.so /usr/lib
ALP ❱ gcc temp.c -ldl
ALP ❱ ./a.out
func1: 1
func2: upgrading to version 2

注意

如何找到a.out文件中的路径 首先编译并使用stringsgrep

ALP ❱ gcc temp.c -ldl -Wl,-rpath,/home/shu/codeblock/ALP
ALP ❱ strings a.out  | grep \/
/lib/ld-linux.so.2
/home/shu/codeblock/ALP

已经在Ubuntu 16.04 LTS上进行了测试