我想在编译应用程序时使用额外的库但是我无法将库目录的路径添加到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
添加库的步骤之后需要做些什么?
答案 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
文件中的路径
首先编译并使用strings
和grep
:
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上进行了测试