如何让链接器报告给定函数的链接位置

时间:2016-01-21 21:51:33

标签: c linux linker cross-build

我试图在linux主机上交叉构建win32和win64 exes时遇到了问题。

我正在使用mingw交叉构建工具链

我的.c文件包含time.h,以便在clock_gettime()中使用main()

现在这是一个POSIX的东西所以不能保证它是Windows便携式的

然而,在另一台具有类似(但显然不完全相同)设置的笔记本电脑上,它确实编译并链接没有问题

在这台笔记本电脑上(我要迁移的新笔记本电脑)我收到链接器错误:

undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status

我希望能够做的是以某种方式让另一台机器上的链接器告诉我它在哪里找到带有clock_gettime()的.dll

为了让我看看新笔记本电脑上是否存在类似的.dll以及是否可以使用clock_gettime()符号

是否有可能让链接器报告此信息,或许某种冗长的模式。我已经走下了GIYF路线,但到目前为止还是一片空白。

2 个答案:

答案 0 :(得分:1)

使用glibc版本所需的-lrt进行编译< 2.17。

其他笔记本电脑可能会发生的事情是它有一个glibc> = 2.17的最新版本,其中clock_gettime()是libc的一部分。但是在glibcs​​中,它是一个独立的库。因此,您需要自己链接。

答案 1 :(得分:0)

要使用clock_gettime()中定义的<time.h>,当在Linux主机上使用mingw工具链跨窗构建Windows时,您必须链接到pthread 而不是 {{1 }}

例如:

源代码example.c看起来像这样:

rt

本机版本如下所示:

#include <time.h>
...
struct timespec t1;
...
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1);

win32 cross-build看起来像这样:

gcc example.o -lrt -o example

不幸的是,我不知道如何让链接器告诉我它在哪个库中找到了一个已成功链接到的函数

即。如果我能以某种方式让链接器通知我它已经在我的另一台成功链接的机器上的libpthread中找到了clock_gettime(),我可以节省很多关于修复此机器上的链接错误问题的麻烦。