4

私の環境は Windows8.1 (64bit) で、Visual Studio 2010 を使用しています。

すべての *.dll ファイルを system32 、 SYSWOW64 に配置しました(win8 64ビットを使用しているため)。

VC 2010 を使用する x64 システム用の *.lib ファイルの場所をリンクします。

もちろん、フォルダー lib forders.. を追加し、フォルダーを含める.. など..

しかし、「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

私を助けてください

4

1 に答える 1

7

main()名前を探しているという事実__imp__pthread_createは、32 ビット ターゲット用にプロジェクトをビルドしていることを示しています。

64 ビットの Win32 pthread ライブラリには、pthread_create()次の名前のインポート シンボルがあります。

__imp_pthread_create

32 ビットの Win32 pthread ライブラリには次のものがあります。

__imp__pthread_create

32 ビット ライブラリの余分なアンダースコアに注意してください。main()これは、探している命名規則と一致するため、32 ビット ターゲット用にビルドしていることを示しています。追加のアンダースコアは、Win32 pthread ライブラリで使用される cdecl 呼び出し規約で x86 ビルドが名前を処理する方法の一部です。x64 は cdecl 呼び出し規則を使用せず (x64 には呼び出し規則が 1 つしかありません)、アンダースコアは x64 ビルドのシンボルの先頭に追加されません。

32 ビット pthread ライブラリをダウンロードまたはビルドするか、プロジェクト構成を変更して 64 ビット ターゲット用にビルドする必要があると思います。

于 2013-11-16T20:26:16.237 に答える