尝试使用 Ubuntu 为 64 位 unix 编译一些东西。作为免责声明,我几天前才开始使用 linux 和 gcc,所以仍在学习我的方法。无论如何,收到以下错误:

/home/myuser/myproject/myfile.cpp:437: 未定义对 `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++ 找错了地方。因此,在上面的命令行中,我将 -lrt 替换为/usr/lib/x86_64-linux-gnu/librt.a 和宾果游戏!它编译和链接很好。不幸的是,这是一个自动化工具,我需要它在许多计算机上工作,并且无法对 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

从我的阅读到这一点,它看起来应该是我所需要的。有点不知道从这里去哪里......

最佳答案

回答我自己的问题,以防万一其他人有这个问题。结果证明链接的是正确的 librt.a,但链接器对链接顺序非常敏感。将 -lrt 和 -lpthread 放在组的末尾可以解决问题。

关于gcc - 如何在 Ubuntu 中为 g++ 的 64 位库设置库搜索路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8301600/

10-11 15:07