Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交叉编译可执行文件can';t解析符号pthread\u创建_C_Mips_Cross Compiling - Fatal编程技术网

交叉编译可执行文件can';t解析符号pthread\u创建

交叉编译可执行文件can';t解析符号pthread\u创建,c,mips,cross-compiling,C,Mips,Cross Compiling,我编译最新的buildroot,并使用输出主机mipsel-linux-gcc编译我的c程序。我已经测试了hello world程序,它在MIPS机器上运行良好(实际上是一个用padavan闪存的路由器)。然后我编译了我的程序,它运行良好,调用了pthread\u create,表明它无法解析symbolpthread\u create 我想可能是因为路由器没有libpthread.so,所以我检查: [RT-AC54U /home/root]# find / -name "*pthread*"

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

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

[RT-AC54U /home/root]# find / -name "*pthread*"
/lib/libpthread-0.9.33.2.so
/lib/libpthread.so.0
结果是libpthread文件确实存在

然后我怀疑这可能是交叉编译设置造成的。因此,我通过添加
-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
!与本机(x64)gcc编译的相同程序相比:

我现在最好的猜测是,
mipsellinuxgcc
找不到
libpthread.so
,因此没有向可执行文件添加关于libpthread的信息。奇怪的是,它一点也没有抱怨


谁能告诉我怎么了?谢谢。

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

e、 g:

gcc.c-o-lpthread
gcc是编译器命令


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

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

e、 g:

gcc.c-o-lpthread
gcc是编译器命令


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

==,我忘了提到我在gcc命令中使用了
-pthread
。谢谢你的建议也许你可以看看这篇文章:使用-lpthread选项只会导致pthread库被链接-预定义的宏没有被定义。顺便说一下,我确认切换到
-lpthread
没有什么区别,在elf文件中仍然看不到需要pthread的部分,我将在上面找到一个MIPS libpthread.so来放置在buildroot中,看看发生了什么==,我忘了提到我在gcc命令中使用了
-pthread
。谢谢你的建议也许你可以看看这篇文章:使用-lpthread选项只会导致pthread库被链接-预定义的宏没有被定义。顺便说一下,我确认切换到
-lpthread
没有什么区别,在elf文件中仍然没有看到pthread所需的部分,我将在其上查找一个MIPS libpthread.so以放置在buildroot中并查看发生了什么
readelf -d ./myprogram |grep NEEDED
0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
gcc <source file>.c -o <object file name> -lpthread