如何修复对`_imp__pthread_create'的未定义引用

7 浏览
0 Comments

如何修复对`_imp__pthread_create'的未定义引用

我在Windows 7 32位系统上使用MinGW编译器。

但是我无法编译使用pthread的源代码。

我的代码如下:

#include 
#include 
int main(int argc, char** argv)
{
  (void)argv;
  printf("######## start \n");
#ifndef pthread_create
  return ((int*)(&pthread_create))[argc];
#else
  (void)argc;
  return 0;
#endif
}

在编译时发生错误。

gcc -I /usr/local/include -L /usr/local/lib/libpthread.dll.a trylpthread.c
C:\Users\xxx\AppData\Local\Temp\cc9OVt5b.o:trylpthread.c:(.text+0x25): undefined reference to `_imp__pthread_create'
collect2.exe: error: ld returned 1 exit status

我使用的pthread库是:

pthreads-w32-2.8.0-3-mingw32-dev

在/usr/local/lib中有libpthread.dll.a文件。

有没有人知道如何解决这个问题?

0
0 Comments

原因:在给gcc命令行添加库的搜索路径时,使用了一个不是目录的路径/usr/local/lib/libpthread.dll.a。同时,代码中的#ifndef pthread_create部分存在逻辑错误,会导致链接时找不到定义的_imp__pthread_create。

解决方法:修改命令行,将-L /usr/local/lib/libpthread.dll.a改为-lpthread,告诉链接器要链接pthread库。同时,修改代码中的#ifndef pthread_create部分,使其正确执行。

下面是修改后的代码:

#include

#include

int main(int argc, char** argv)

{

(void)argv;

printf("######## start \n");

return ((int*)(&pthread_create))[argc];

}

编译命令为:

gcc -Wall -I /usr/local/include -o trylpthread.o -c trylpthread.c

链接命令为:

gcc -o trylpthread.exe trylpthread.o -pthread

需要注意的是,在运行程序时,需要确保正确的pthreadGC??.dll位于程序加载器搜索dll的路径之一。

建议使用更现代的Windows GCC端口,如TDM-GCC或mingw-w64,它们内置了pthread支持。编译命令为:

gcc -Wall -o trylpthread.o -c trylpthread.c

链接命令为:

gcc -o trylpthread.exe trylpthread.o -pthread

0