【问题标题】:How to set library search path for 64 bit libraries for g++ in Ubuntu?如何在 Ubuntu 中为 g++ 设置 64 位库的库搜索路径?
【发布时间】:2011-11-28 20:01:40
【问题描述】:

尝试使用 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

从我的阅读来看,这应该是我所需要的。有点卡住从这里去哪里......

【问题讨论】:

    标签: gcc ubuntu linker 64-bit


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 2015-06-07
      • 2012-02-05
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多