Gcc LD_LIBRARY_PATH vs LIBRARY_PATH 我正在构建一个简单的C++程序,我想暂时将系统提供的共享库替换为一个更新近的版本,用于开发和测试。
我尝试设置LD_LIBRARY_PATH变量,但链接器(LD)失败,原因是: /usr/bin/ld:找不到-lyaml cpp 我希望这能起作用,因为根据ld手册: 链接器使用以下搜索 找到所需共享资源的路径 图书馆:。。。对于本机链接器, 环境变量的内容 “LD_库_路径” 然后我试着设置库路径,结果成功了 根据GCC手册: 价值 库路径是以冒号分隔的列表 目录的类型,很像路径。什么时候 配置为本机编译器,GCC 尝试这样指定的目录 搜索特殊链接器时 文件,如果无法使用 GCC_EXEC_前缀。使用GCC链接 当需要时也使用这些目录 寻找普通图书馆 -l选项(但不包括目录) 用-L指定(以先到为准) 正如(GCC)手册所建议的,库路径之所以有效,是因为我链接了GCC 但是Gcc LD_LIBRARY_PATH vs LIBRARY_PATH 我正在构建一个简单的C++程序,我想暂时将系统提供的共享库替换为一个更新近的版本,用于开发和测试。,gcc,g++,ld,Gcc,G++,Ld,我尝试设置LD_LIBRARY_PATH变量,但链接器(LD)失败,原因是: /usr/bin/ld:找不到-lyaml cpp 我希望这能起作用,因为根据ld手册: 链接器使用以下搜索 找到所需共享资源的路径 图书馆:。。。对于本机链接器, 环境变量的内容 “LD_库_路径” 然后我试着设置库路径,结果成功了 根据GCC手册: 价值 库路径是以冒号分隔的列表 目录的类型,很像路径。什么时候 配置为本机编译器,GCC 尝试这样指定的目录 搜索特殊链接器时 文件,如果无法使用 GCC_EXEC_前
- 既然我和gcc有联系,为什么ld是 正在调用,作为错误消息 建议李>
- 这有什么意义 有两个变量服务于同一个变量 目的?还有别的吗 差异
库路径
在编译之前由gcc用于搜索包含需要链接到程序的静态库和共享库的目录
LD_LIBRARY_PATH
用于在成功编译和链接包含共享库的目录后,由您的程序搜索该目录
编辑:
正如下面指出的,您的库可以是静态的,也可以是共享的。如果它是静态的,那么代码将被复制到您的程序中,在编译和链接程序后,您不需要搜索库。如果您的库是共享的,则需要将其动态链接到您的程序,此时
LD\u library\u PATH
起作用。LD\u library\u PATH
在程序启动时搜索,library\u PATH
在链接时搜索
警告:
- 将库链接到
(而不是ld
或gcc
)时,不会读取g++
或LIBRARY\u路径
环境变量ld\u LIBRARY\u路径
- 将库与
或gcc
链接时,将读取g++
环境变量(请参阅)LIBRARY\u PATH
gcc在处于链接模式时在内部调用ld。当然,ld_LIBRARY_PATH仅对动态库有意义。我的观点是,如果我(直接)使用ld进行链接,那么根据ld手册,ld_LIBRARY_PATH将用于搜索包含需要链接到我的程序的库的目录。我这里肯定遗漏了什么。除非您自己调用ld并将对象文件与库结合起来,否则它将“继承”gcc传递给它的路径。您可以使用-Xlinker选项覆盖标准gcc。实际上,
LIBRARY\u PATH
用于搜索包含静态和动态库的目录,而不是仅搜索静态库。是的,这是错误的-区别在于LIBRARY\u PATH
用于搜索库(静态或动态)在编译时和LD_LIBRARY_PATH
在运行时搜索动态库。当然,在运行时您不需要搜索静态库。注意:链接库时,ld
本身不会在LIBRARY\u路径
或ld\u LIBRARY\u路径
中查找库。只有当gcc
调用ld
时,LIBRARY\u PATH
才会被使用。(这是通过艰苦的学习得到的。)@Rufflewind很有趣,但如果您提供了任何参考,则会更有趣。此视图在搜索库时(链接时间与运行时间)进行了区分,而@Naveen对搜索的库类型进行了区分(静态与动态)。是否有两个视图实际上完全相同(动态:运行时=静态:链接时),或者在这种对应关系不成立的情况下是否存在重要情况?我想在编译时也需要一些关于动态库的知识。@Rufflewind嗨Rufflewind。我阅读了ld
的手册,它说在搜索共享库的依赖项时,只搜索ld\u库路径
。如果只运行ld-lSOMETHING
,它实际上不会在ld\u LIBRARY\u PATH
中搜索这些路径。