2

我编译了一个项目并在我的系统上运行它,它做得很好。

我将它上传到 git 并要求我的管理员在服务器上运行它,它说undefined reference to 'clock_gettime'. 可以通过使用-lrt选项链接库来解决此错误。之前我也遇到过类似的问题,但这与在选项math.h的帮助下链接库有关。-lm

有没有办法找到要链接的所有库,这样您就不会遇到此类问题,也不会在管理员面前感到尴尬。如何决定要链接的所有库。可以有一个思考过程吗?

4

2 回答 2

1

对于基于 *nix 的机器,ldd可执行文件将打印共享库依赖项。

于 2012-06-28T02:06:20.987 回答
1

有些man页面会提到应该使用的标题和库。(不幸的是,并非所有页面都如此。)

例如,查看man 3 signal. 在我的系统上,该页面LIBRARY的顶部有一个部分Standard C Library (libc, -lc),后面是一个SYNOPSIS部分#include <signal.h>

其他一些策略包括:

  • 在 shell 循环中直接使用stringspiped toegrep在已安装的库中搜索对名称的引用。这可能会为常用名称返回大量误报,但对于与单个英文单词不匹配的复杂函数名称非常有效。

  • 迭代编译和链接。如果您尝试解析单个函数,请编写一个调用该函数的小程序,并使用 shell 或 makefile 循环来测试系统上的每个单个库(从最有可能来自/usr/lib其他地方或其他任何地方的候选库开始)。在某个时候,构建会成功并向您展示正确的库。这种方法需要一些工作来设置,但是您创建的基础架构也很容易在将来重用。

  • 使用链接器的工具(例如otool,在 Mac OS XobjdumpreadelfSolaris 或 Linux 上)反复检查二进制文件。例如,尝试从特定名称(otool -v -t -p _symbol在 Mac OS X 上)开始反汇编库的文本部分。

于 2012-06-28T02:55:03.690 回答