尝试在Ubuntu上编译64位Unix相关内容。免责声明:我只是几天前开始使用Linux和GCC,仍在学习中。无论如何,出现以下错误:
/home/myuser/myproject/myfile.cpp:437: undefined reference to `clock_gettime'
快速搜索后发现需要使用-lrt选项与librt.a链接。因此,我检查了我的命令行(为了可读性进行了格式化,文件名不同,并且我已删除了文件名列表)。
/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
根据我目前的阅读,看起来这就是我需要的。不太确定接下来该去哪里...