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

时间:2011-11-28 20:01:40

标签: gcc ubuntu linker 64-bit

尝试使用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 ++看错了地方。所以在上面的命令行中我用-usr/lib/x86_64-linux-gnu/librt.a和bingo替换-lrt!它编译和链接很好。不幸的是,这是一个自动化工具,我需要它在许多计算机上工作,不能对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 个答案:

答案 0 :(得分:1)

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