4

これは私のナットをやっています.pdcurses(つまり、Windows用のncurses)をテストプログラムに含めようとしています。ただし、リンケージは失敗しています。

Visual Studio 2010 を使用しています。

私は正しいリンクの追加ライブラリ パスを設定し、ライブラリ自体を一覧表示することを十分に認識しています。喜びはありません。

pdcurses の Web サイトでさまざまなビルド済みのものを試しました。そのような幸運はありません。

もちろん、ソースからのビルドに頼りました。規定に従って、Visual Studio コマンド プロンプトから nmake を使用します。正常に構築されました。リンクの灘。

何が欠けていますか。金曜日では遅すぎるかもしれません...

以下の出力:

1>------ Build started: Project: test, Configuration: Debug x64 ------
1>Build started 14/12/2012 16:24:32.
1>InitializeBuildStatus:
1>  Touching "x64\Debug\test.unsuccessfulbuild".
1>ClCompile:
1>  main.c
1>C:\dep\pdcurses\curses.h(160): warning C4005: 'MOUSE_MOVED' : macro redefinition
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wincon.h(101) : see previous definition of 'MOUSE_MOVED'
1>main.c(73): warning C4133: 'function' : incompatible types - from 'unsigned short [20]' to 'const char *'
1>ManifestResourceCompile:
1>  All outputs are up-to-date.
1>main.obj : error LNK2019: unresolved external symbol endwin referenced in function main
1>main.obj : error LNK2019: unresolved external symbol wgetch referenced in function main
1>main.obj : error LNK2001: unresolved external symbol __imp_stdscr
1>main.obj : error LNK2019: unresolved external symbol refresh referenced in function main
1>main.obj : error LNK2019: unresolved external symbol printw referenced in function main
1>main.obj : error LNK2019: unresolved external symbol initscr referenced in function main
1>C:\proj\test.exe : fatal error LNK1120: 6 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.47
4

1 に答える 1

5

Ok。私はかなりばかげていると感じます。これが後世のための解決策です...

配布されている pdcurses バイナリは32​​ ビットです。私は64bit用にビルドしようとしていました。

基本的に、リンケージの最初のルールを忘れていました。アーキテクチャを混ぜ合わせてはいけません。

より具体的には、ソースからビルドしようとすると:

1) 間違った Visual Studio コマンド プロンプトを開始することに注意してください。[ツール] メニューのデフォルトは x86 です。cl.exe を実行してみると、これが分かります。

代わりに、スタート メニューからプロンプトを実行します。Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio x64 Win64 Command Prompt (2010)

pdcurses ディレクトリ/win32a に cd して次のように入力し、ビルドを呼び出します。

nmake -f vcwin32.mak DLL=pdcurses.dll

また、2) pdcurse をコンパイルする前に、pdcurses Windows makefile (vcwin32.mak) の行 111 を変更します。

cvtres /MACHINE:X64 /NOLOGO /OUT:pdcurses.obj pdcurses.res

(注: つまり、X64 アーキテクチャ!)

すべてが一貫しています。pdcurses ライブラリがビルドされます。そして、(元の出力が示すように) x64 でビルドしているテスト アプリとリンクします。

于 2012-12-14T17:39:33.223 に答える