我的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
拜托,帮帮我
答案 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位目标。