gpt4 book ai didi

交叉编译可执行文件无法解析符号 pthread_create

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:57 31 4
gpt4 key购买 nike

我编译最新的 buildroot,并使用输出主机 mipsel-linux-gcc 来编译我的 c 程序。我已经测试了 hello world 程序,它在 MIPS 机器上运行良好(实际上是一个用 padavan 刷新的路由器)。然后我编译了我的程序,它运行良好,它调用了 pthread_create,表明它无法解析符号 pthread_create

我想可能是因为路由器没有libpthread.so,所以我查了一下:

[RT-AC54U /home/root]# find / -name "*pthread*"
/lib/libpthread-0.9.33.2.so
/lib/libpthread.so.0

事实证明 libpthread so 文件确实存在。

然后我怀疑可能是交叉编译设置引起的。所以我通过添加 -L 来检查链接库。 -Wl,--verbose 选项(从其他 SO 帖子中学习)并找到:

attempt to open buildroot/output/host/usr/mipsel-buildroot-linux-uclibc/sysroot/usr/
lib/libpthread.a succeeded

链接时,链接器只找到libpthread.a,所有libpthread.so搜索失败。看到这一点,我使用 find 进行了检查。 -在 buildroot 目录中命名为“*pthread.so”,但什么也找不到。

如果链接器只找到 pthread 静态库那么它为什么不提示?我浏览了 make menuconfig,没有看到任何关于 pthread 库的选项。

readelf 的输出是:

readelf -d ./myprogram |grep NEEDED
0x00000001 (NEEDED) Shared library: [libc.so.0]

我们可以看到该程序不包含对libpthread 的需求!与native(x64) gcc编译的同一个程序对比:

readelf -d ./myprogram |grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]

我现在最好的猜测是 mipsel-linux-gcc 找不到 libpthread.so ,因此没有将有关 libpthread 的信息添加到可执行文件中。奇怪的是它根本没有提示。

谁能告诉我这是怎么回事?谢谢。

最佳答案

尝试在编译命令中加入-lpthread

例如:

gcc <source file>.c -o <object file name> -lpthread

gcc 是编译命令。

-lpthread 是执行pthread.h库文件的选项。

关于交叉编译可执行文件无法解析符号 pthread_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42591209/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com