我正在构建一个简单的C++程序,我想临时用一个更新版本的共享库替换系统提供的共享库,以便进行开发和测试。
我尝试设置LD_LIBRARY_PATH变量,但链接器(ld)失败,出现以下错误:
/usr/bin/ld:找不到-lyaml-cpp
我希望它能正常工作,因为根据ld手册页:
链接器使用以下搜索路径来查找所需的共享库:...对于本机链接器,环境变量“LD_LIBRARY_PATH”的内容...
然后,我尝试设置LIBRARY_PATH,并成功了。
根据《GCC手册》:
LIBRARY_PATH的值是一个冒号分隔的目录列表,与
非常相似。当配置为本机编译器时,如果使用GCC_EXEC_PREFIX找不到特殊链接器文件,则在搜索特殊链接器文件时,GCC会尝试这样指定的目录。在搜索-l选项的普通库时,使用GCC进行链接也会使用这些目录(但使用-L指定的目录会优先使用)。
正如( GCC )手册所建议的那样,LIBRARY_PATH之所以有效,是因为我与GCC建立了链接。
但是..。
因为我链接到了,,
,
发布于 2010-11-23 06:09:44
在编译之前,gcc使用LIBRARY_PATH
来搜索包含需要链接到程序的静态库和共享库的目录。
在成功编译和链接LD_LIBRARY_PATH
之后,您的程序使用它来搜索包含共享库的目录。
编辑:如下所示,你的库可以是静态的,也可以是共享的。如果它是静态的,那么代码将被复制到您的程序中,并且在您的程序编译和链接之后,您不需要搜索库。如果你的库是共享库,那么它需要动态链接到你的程序,这就是LD_LIBRARY_PATH
的用武之地。
发布于 2010-11-28 04:13:54
在程序启动时搜索LD_LIBRARY_PATH
,在链接时搜索LIBRARY_PATH
。
来自comments的警告
ld
(而不是gcc
或g++
)链接库时,不读取LIBRARY_PATH
或LD_LIBRARY_PATH
环境变量。gcc
uses these directories when searching for ordinary libraries").发布于 2011-12-02 08:36:44
既然我链接了gcc,为什么会调用ld,正如错误消息所暗示的那样?
当处于链接模式时,gcc在内部调用ld。
https://stackoverflow.com/questions/4250624
复制相似问题