我正在构建一个简单的C ++程序,我想暂时用系统提供的共享库替换它的更新版本,以进行开发和测试。
我尝试设置LD_LIBRARY_PATH变量,但链接器(ld)失败了:
/ usr / bin / ld:找不到-lyaml-cpp
我希望这可以工作,因为根据ld手册页:
链接器使用以下搜索 找到所需共享的路径 库:...对于本机链接器, 环境变量的内容 “LD_LIBRARY_PATH” ...
然后我尝试设置LIBRARY_PATH,这很有效。
根据GCC手册:
的价值 LIBRARY_PATH是以冒号分隔的列表 目录,很像PATH。什么时候 配置为本机编译器,GCC 尝试这样指定的目录 搜索特殊链接器时 文件,如果找不到它们使用 GCC_EXEC_PREFIX。使用GCC进行链接 当使用时也使用这些目录 寻找普通的图书馆 -l选项(但目录 用-L指定为第一个。)
正如(GCC)手册所示,LIBRARY_PATH有效,因为我与GCC链接。
但是...
答案 0 :(得分:187)
LIBRARY_PATH
来搜索包含需要链接到程序的静态库和共享库的目录。
LD_LIBRARY_PATH
来搜索包含共享库的目录。
编辑:
如下所述,您的库可以是静态的或共享的。如果它是静态的,则将代码复制到程序中,并且在编译和链接程序后不需要搜索库。如果你的图书馆是共享的,那么它需要动态链接到你的程序,那就是LD_LIBRARY_PATH
发挥作用。
答案 1 :(得分:39)
LD_LIBRARY_PATH
,在链接时搜索LIBRARY_PATH
。
来自comments的警告:
ld
(而不是gcc
或g++
)相关联时,不会读取LIBRARY_PATH
或LD_LIBRARY_PATH
个环境变量。gcc
或g++
相关联时,会读取LIBRARY_PATH
环境变量(请参阅documentation "gcc
uses these directories when searching for ordinary libraries")。答案 2 :(得分:11)
因为我链接gcc为什么要调用ld,因为错误信息表明?
gcc在处于链接模式时会在内部调用ld。