0

我在尝试在 Linux 主机上交叉构建 win32 和 win64 exe 时遇到问题。

我正在使用 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 的路线,但到目前为止还是一片空白。

4

2 回答 2

1

-lrtglibc 版本 < 2.17 需要使用哪个编译。

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

于 2016-01-21T21:56:16.413 回答
0

要在 linux 主机上使用 mingw 工具链为 windows 交叉构建时clock_gettime()定义使用,您必须链接到not<time.h>pthread rt

例如:

源代码 example.c 如下所示:

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

本机构建如下所示:

gcc example.o -lrt -o example

win32 交叉构建如下所示:

i686-w64-mingw32-gcc -I/usr/local/i686-w64-mingw32/include  example.o -L/usr/local/i686-w64-mingw32/bin -lpthread -lws2_32 -o example.exe

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

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

于 2016-01-22T12:14:52.717 回答