Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Ubuntu 16.04:无法将路径添加到LD_库_路径_C++_Ubuntu 16.04 - Fatal编程技术网

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
a
lib
进行测试从来没有问题,因为它可以在
rm-f
之后进行。第二,我的答案是完美的,然后是其他的,我只是让用户/操作选择其中一个;最好是一个标记为重复的。不管怎样,谢谢你让我更了解你。没有人问这些,还有
sudo cp libfunc.so/usr/lib
?嗯?不要碰你的系统目录。我不是在说权利,我是在说明智的行为。你有权破坏你的系统。当然,你在一个不是你的系统上没有多少权利。因为你的分数比我高,让你自己告诉我吧。最终,一个共享对象会转到一个标准路径,当然,这个标准路径和其他文件一样适用于此。否则,不可以,您的库肯定不会转到/usr/lib。首先
cp
a
lib
进行测试从来没有问题,因为它可以在
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