如何在Ubuntu上为g++设置64位库的库搜索路径?

4
尝试在Ubuntu上编译64位Unix相关内容。免责声明:我只是几天前开始使用Linux和GCC,仍在学习中。无论如何,出现以下错误:

/home/myuser/myproject/myfile.cpp:437: undefined reference to `clock_gettime'

快速搜索后发现需要使用-lrt选项与librt.a链接。因此,我检查了我的命令行(为了可读性进行了格式化,文件名不同,并且我已删除了文件名列表)。
/usr/bin/g++ 
-Wl,
--gc-sections 
-fno-exceptions 
-m64 
-B/usr/bin 
-o 
"/home/myuser/myproject" 
-Wl,
-Map, "/home/myuser/myproject/myproject.map" 
-g  
"/home/myuser/myproject/myproject.cpp.obj" 
..and some more .objs..
-Xlinker 
--start-group  
"-lpthread"  
"-lrt"
"/home/myuser/myproject/lib/mylib.a" 
..and some more .as..
-Xlinker 
--end-group 

嗯,看起来-lrt已经存在了,也许我没有librt.a文件?不,搜索所有文件后发现我有/usr/lib/x86_64-linux-gnu/librt.a。我想g++在找错的地方。所以在上面的命令行中,我用/usr/lib/x86_64-linux-gnu/librt.a替换了-lrt,bingo!编译和链接都很好。不幸的是,这是一个自动化工具,我需要它在许多计算机上工作,并且不能对librt.a文件的位置进行假设,因此我真的需要它能够使用-lrt。那么如何设置本地库搜索路径呢?首先尝试更改LD_LIBRARY_PATH环境变量,但显然(从我通过更多谷歌搜索得知的内容)在Ubuntu上会被忽略,我应该改变/etc/ld.so.conf.d/中的.conf文件,但是看起来我已经有x86_64-linux-gnu.conf文件并包含以下行:

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

根据我目前的阅读,看起来这就是我需要的。不太确定接下来该去哪里...

1个回答

1
回答自己的问题,以防其他人遇到同样的问题。原来正确的librt.a已经被链接了,但链接器对链接顺序非常敏感。将- lrt和-lpthread放在组的末尾可以解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接