ウィンドウプラットフォームでPthreadを使用できません
-
21-12-2019 - |
質問
私のenvはWindows8.1(64bit)で、Visual Studio 2010を使用しています。
私はSystem32、Syswow64(Win8 64bitを使用するため)にあるすべての* .dllファイルを入れました。
とリンクの場所VC 2010のX64システム用の* .libファイル。
もちろん、フォルダlibフォーダーを追加して、フォルダなどを含めてください..
しかし、コンパイル「Pthread-used」プロジェクトを試してみると、致命的なエラーが発生しました。
ソース
#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);
}
.
- 対象
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()
という名前が__imp__pthread_create
という名前が、32ビットのターゲットのプロジェクトを構築していることを示します。
64ビットWIN32 PTHREADライブラリには、pthread_create()
の名前が付けられています。
__imp_pthread_create
.
32ビットWIN32 PTHREASライブラリーには:
__imp__pthread_create
.
main()
が探している名前規則と一致する32ビットlibの余分なアンダースコアに注意してください。そのため、32ビットのターゲットを構築していることを示しています。余分なアンダースコアは、x86がWin32 Pthreadライブラリによって使用されているCDECL呼び出し規則の扱いの名前をどのように構築するかの一部です。X64はCDECL呼び出し規約を使用していません(X64は単一の通話規約しか持ちません)、アンダースコアはx64ビルドのシンボルの先頭には追加されていません。
32ビットPTHREADライブラリをダウンロードまたは作成するか、64ビットのターゲットを作成するようにプロジェクト設定を変更する必要があると思います。