如何让链接器报告它为给定函数链接到的位置
How to get linker to report where it is linking to for a given function
我在尝试在 linux 主机上交叉构建 win32 和 win64 exe 时遇到问题。
我正在使用 mingw 交叉构建工具链
我的 .c
文件包含 time.h
以便在 main()
中使用 clock_gettime()
现在这是一个 POSIX
的东西所以不能保证它 windows 便携
然而,在另一台具有类似(但显然不相同)设置的笔记本电脑上它确实可以编译并且link没问题
在这台笔记本电脑(我要迁移到的新笔记本电脑)上,我收到 linker 错误:
undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
我想做的是以某种方式让另一台机器上的 linker 告诉我它在哪里找到带有 clock_gettime() 的 .dll
为了让我看看新笔记本电脑上是否存在类似的 .dll 以及 clock_gettime() 符号是否可用
是否可以让 linker 报告此信息,也许是某种详细模式。我已经走上了 GIYF 路线,但到目前为止还是一片空白。
使用 glibc 版本 < 2.17 所需的 -lrt
进行编译。
在 other 笔记本电脑上可能发生的事情是它有一个最新版本的 glibc >=2.17,其中 clock_gettime()
是 libc 的一部分。但在 glibcs 中较旧,它是一个单独的库。因此,您需要自己link。
在 linux 主机上使用 mingw 工具链为 windows 交叉构建时,要使用 <time.h>
中定义的 clock_gettime()
,您必须 link 到 pthread
不是 rt
例如:
源代码,example.c,如下所示:
#include <time.h>
...
struct timespec t1;
...
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1);
本机构建如下所示:
gcc example.o -lrt -o example
win32 cross-build 看起来像这样:
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
不幸的是,在如何让 linker 告诉我它在哪个库中找到它已成功 link 的函数方面,我 none 更聪明
即如果我能以某种方式让 linker 通知我它在我的另一台机器上的 libpthread 中找到 clock_gettime() 并成功 linking,我本可以节省很多忙着解决这台机器上的 link 错误问题。
我在尝试在 linux 主机上交叉构建 win32 和 win64 exe 时遇到问题。
我正在使用 mingw 交叉构建工具链
我的 .c
文件包含 time.h
以便在 main()
clock_gettime()
现在这是一个 POSIX
的东西所以不能保证它 windows 便携
然而,在另一台具有类似(但显然不相同)设置的笔记本电脑上它确实可以编译并且link没问题
在这台笔记本电脑(我要迁移到的新笔记本电脑)上,我收到 linker 错误:
undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
我想做的是以某种方式让另一台机器上的 linker 告诉我它在哪里找到带有 clock_gettime() 的 .dll
为了让我看看新笔记本电脑上是否存在类似的 .dll 以及 clock_gettime() 符号是否可用
是否可以让 linker 报告此信息,也许是某种详细模式。我已经走上了 GIYF 路线,但到目前为止还是一片空白。
使用 glibc 版本 < 2.17 所需的 -lrt
进行编译。
在 other 笔记本电脑上可能发生的事情是它有一个最新版本的 glibc >=2.17,其中 clock_gettime()
是 libc 的一部分。但在 glibcs 中较旧,它是一个单独的库。因此,您需要自己link。
在 linux 主机上使用 mingw 工具链为 windows 交叉构建时,要使用 <time.h>
中定义的 clock_gettime()
,您必须 link 到 pthread
不是 rt
例如:
源代码,example.c,如下所示:
#include <time.h>
...
struct timespec t1;
...
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t1);
本机构建如下所示:
gcc example.o -lrt -o example
win32 cross-build 看起来像这样:
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
不幸的是,在如何让 linker 告诉我它在哪个库中找到它已成功 link 的函数方面,我 none 更聪明
即如果我能以某种方式让 linker 通知我它在我的另一台机器上的 libpthread 中找到 clock_gettime() 并成功 linking,我本可以节省很多忙着解决这台机器上的 link 错误问题。