我的env是windows8.1(64bit)和使用Visual Studio 2010。

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

和链接位置,其中* .lib文件为x64-system的vc 2010。

当然,我添加了其他文件夹lib _ ..,包括文件夹..等..

但是当我尝试编译“pthread使用”项目时,发生了致命错误。

-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
.

请帮我

有帮助吗?

解决方案

main()正在寻找名称的事实,因此属于您为32位目标构建项目。

64位win32 pthread库具有for __imp__pthread_create的导入符号,名称:

__imp_pthread_create
.

32位win32 pthread libary有:

__imp__pthread_create
.

注意32位lib中的额外下划线 - 与您的pthread_create()正在寻找的名称约定相匹配,因此您是您为32位目标构建的指示。额外的下划线是X86在Win32 Pthread库使用的CDECL调用惯例中构建处理名称的一部分。x64不使用CDECL调用约定(X64只有单个调用约定),下划线不会向x64构建中添加到符号中。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top