我无法在窗口平台中使用pthread

时间:2013-11-16 15:37:33

标签: c pthreads pthreads-win32

我的env是Windows8.1(64位)并使用Visual Studio 2010。

我确实将所有* .dll文件放在system32,SYSWOW64中(因为我使用win8 64bit。)

并将x64-system的* .lib文件与VC 2010链接在一起。

当然,我添加了额外的文件夹lib forders ..,包含文件夹......等等。

但是当我尝试编译“pthread-used”项目时,会发生致命错误。

-source

#include<pthread.h>
#include<stdio.h>
int doit_id,trd_id;
pthread_t trd;
void *doit(void *data){
    doit_id = (int)data;
    return 0;
}
int main(){
    trd_id=pthread_create(&trd,NULL,doit,0);
    return (0);
}

-error

1.obj : error LNK2019: unresolved external symbol __imp__pthread_create (referenced in function _main)
C:\Users\~program Location~ : fatal error LNK1120: 1 unresolved externals

拜托,帮帮我

1 个答案:

答案 0 :(得分:5)

您的main()正在寻找名称__imp__pthread_create这一事实表明您正在为32位目标构建项目。

64位Win32 pthread库具有pthread_create()的导入符号,其名称为:

__imp_pthread_create

32位Win32 pthread库包含:

__imp__pthread_create

请注意32位lib中的额外下划线 - 与main()正在查找的名称约定相匹配,因此它表示您正在为32位目标构建。额外的下划线是x86如何在Win32 pthread库使用的cdecl调用约定中处理名称的一部分。 x64不使用cdecl调用约定(x64只有一个调用约定),x64版本中的符号不​​会附加下划线。

我认为您需要下载或构建32位pthread库或更改项目配置以构建64位目标。