C++ Ubuntu 16.04:无法将路径添加到LD_库_路径
我想在编译应用程序时使用其他库,但我无法将库目录的路径添加到C++ Ubuntu 16.04:无法将路径添加到LD_库_路径,c++,ubuntu-16.04,C++,Ubuntu 16.04,我想在编译应用程序时使用其他库,但我无法将库目录的路径添加到LD_library\u path,因此生成系统找不到它: 我在一个新文件petsc.conf中添加了库目录/etc/ld.so.conf.d,该文件包含/home/klaus/OpenFOAM/klaus-5.0/petsc-3.7.6/arch-linux2-c-debug/lib 当我运行ldconfig-p时,会找到库,但它不会出现在LD\u library\u路径中 我还将路径添加到.bashrc export-LD\u LI
LD_library\u path
,因此生成系统找不到它:
我在一个新文件petsc.conf中添加了库目录/etc/ld.so.conf.d
,该文件包含/home/klaus/OpenFOAM/klaus-5.0/petsc-3.7.6/arch-linux2-c-debug/lib
当我运行
ldconfig-p
时,会找到库,但它不会出现在LD\u library\u路径中
我还将路径添加到.bashrc
export-LD\u LIBRARY\u PATH=$LD\u LIBRARY\u PATH:/home/klaus/OpenFOAM/klaus-5.0/petsc-3.7.6/arch-linux2-c-debug/lib
源代码,稍后重新启动,但当我用
env|grep'^LD_LIBRARY_PATH'
库仍然没有包含,我得到一个未找到的编译错误(链接)
要将库添加到
LD\u library\u路径
,LD\u library\u路径
,LD\u library\u路径
不会影响链接<代码>LD_LIBRARY_PATH在加载时用于覆盖默认的库搜索路径。您应该使用库的完整路径(如g++-l/path/to/mylib/lib_mylib.so…
)或提供搜索路径(如g++-l/path/to/mylib/
)
在运行时,使用
LD\u LIBRARY\u PATH
或使用-rpath
选项链接(以在链接时添加非默认库搜索路径)。LD\u LIBRARY\u PATH
不会影响链接<代码>LD_LIBRARY_PATH在加载时用于覆盖默认的库搜索路径。您应该使用库的完整路径(如g++-l/path/to/mylib/lib_mylib.so…
)或提供搜索路径(如g++-l/path/to/mylib/
)
在运行时,使用
LD_LIBRARY\u PATH
或使用-rpath
选项链接(以在链接时添加非默认库搜索路径)。假设我在文件名temp.c
中使用libfunc.so
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.
使用动态库的第二种方法(=使用环境变量LD\u library\u PATH
):
使用动态库的第三种方法(=将其复制到标准路径):
注意 如何在
a.out
文件中找到路径首先编译它并使用
字符串
和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上测试过了假设我在文件名
temp.c
中使用了libfunc.so
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.
使用动态库的第二种方法(=使用环境变量LD\u library\u PATH
):
使用动态库的第三种方法(=将其复制到标准路径):
注意 如何在
a.out
文件中找到路径首先编译它并使用
字符串
和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上进行了测试,
LD_LIBRARY_路径
用于动态加载库。在编译了的路径中
尝试LD\u LIBRARY\u path=$PWD
LD\u LIBRARY\u路径用于动态加载的库。在编译了.so
的路径中,请尝试LD_LIBRARY\u path=$PWD
这一切都不需要,而sudo cp libfunc.so/usr/lib
?嗯?不要碰你的系统目录。我不是在说权利,我是在说明智的行为。你有权破坏你的系统。当然,你在一个不是你的系统上没有多少权利。因为你的分数比我高,让你自己告诉我吧。最终,一个共享对象会转到一个标准路径,当然,这个标准路径和其他文件一样适用于此。否则,不可以,您的库肯定不会转到/usr/lib。首先cp
alib
进行测试从来没有问题,因为它可以在rm-f
之后进行。第二,我的答案是完美的,然后是其他的,我只是让用户/操作选择其中一个;最好是一个标记为重复的。不管怎样,谢谢你让我更了解你。没有人问这些,还有sudo cp libfunc.so/usr/lib
?嗯?不要碰你的系统目录。我不是在说权利,我是在说明智的行为。你有权破坏你的系统。当然,你在一个不是你的系统上没有多少权利。因为你的分数比我高,让你自己告诉我吧。最终,一个共享对象会转到一个标准路径,当然,这个标准路径和其他文件一样适用于此。否则,不可以,您的库肯定不会转到/usr/lib。首先cp
alib
进行测试从来没有问题,因为它可以在rm-f
之后进行。第二,我的答案是完美的,然后是其他的,我只是让用户/操作选择其中一个;最好是一个标记为重复的。无论如何,谢谢你让我更了解你。
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