
error LNK2019: 未解決の外部シンボル __imp__○@4 が関数 _○ で参照されました
すべてのエクスポート関数について、上記と同じエラーとなります。
「@4」等、DEFファイルに記述されたエクポート番号までは捉えているのにエラーとは何事でしょうか。
Microsoftのアンサーを見ても理解できません。
ツール:VisualStudio2010のMFC
小生の知識
DLLとリンクする場合、○.libファイルとエクスポート関数を定義する○.hファイルがあればよい。これまで、この考え方でうまくできていました。
他社のICのドライバにおいて、コンパイル・リンクで苦労したことはありません
困りました。
FTDI社のFT232HでSPI-USB変換を目論んで、多数のファイル、サンプルプロジェクトをダウンロードしました。
サンプルプロジェクトを生のまま、VisualStudio2010にかけると問題なく成功します。
ソースを切り取って、こちらのアプリ(MFCのダイアログベース)に利用します。
(このやり方で、他社のドライバでは成功しています)
結果、コンパイラは通るが、リンクで関数が存在しないとなります。
libMPSSE.dll、libMPSSE.lib、libMPSSE_spi.h :○.dll、○.lib、○.h 揃っています。
VisualStudioのツールDumpbin /exportsでlibMPSSE.dllを見ると確かにエクスポート関数が存在するのが見えます。(ただし、libファイルは不明です)
ところで○.hを見ると
#ifdef FTCSPI_EXPORTS
#define FTCSPI_API __declspec(dllexport)
#else
#define FTCSPI_API __declspec(dllimport)
#endif
はなんでしょうか。初めて見るものです。関係しているでしょうか。
#ifdef __cplusplus
extern "C" {
#endif
、、、、、、、
#ifdef __cplusplus
}
#endif
はなんとなくわかります。また他に他社のドライバと目立った違いはないようです。
No.1ベストアンサー
- 回答日時:
VisualStudio2010 は使用した事ありませんが、
どこかリンカの設定に詳細メッセージを吐く項目が有るはずなので、そこを活かしてみると、閲覧者にも状況が判ると思います。
一応、私が見て前提にしている事は、
・アプリ(MFCのダイアログベース)では libMPSSE_spi.h をインクルードしている。
・また、libMPSSE.lib はアプリから参照出来る位置に配置・定義されている。
です。
なお、○.dll、○.lib、○.h はおそらく雛形ですからプロジェクトから外した方が良くないですか? 回答側から見て混乱するだけなので…
<<どこかリンカの設定に詳細メッセージを吐く項目が有るはずなので、そこを活かしてみると、閲覧者にも状況が判ると思います。>>
davidfox 様、よいヒントをありがとうございました。
リンカーオプションを眺めますと、
リンカの設定に、「進行状況の表示」があり、「詳細情報をすべて表示 (/VERBOSE)」と設定すると、多数の詳しいメッセージが出ました。
これをヒントにして、考えて、
1.リンカの設定に「対象コンピュータ」を選択する所があって、デフォルトでは「MachineX86 (/MACHINE:X86)」となっていて、これはBADでした。
これを「MachineX64 (/MACHINE:X64)」に設定します。
2、「ビルド」 - 「構成マネージャ」― 「プラットホーム」でデフォルト の「Win32」になっているものを、「X64」に変更します
以上、2点を設定することで、エラーが出なくなりました。
結論は、○.libは64bit版で作られていたということになります。
FTDI社は、64bit版のみを提供していた。もし、32bit版も同時提供していたら、小生は気づかずに32bit版を作っていたことでしょう。現実に32bit版でも64bit上で動くので、自分では64bitアプリを作ったつもりになっていたでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VS2008 C++】2つのプロジェ...
-
Makefileと共有ライブラリ
-
BorlandC++Builder5.0でリンカ...
-
python エラー
-
アプリケーションのDLLファイル...
-
DLLファイルの逆コンパイラにつ...
-
組み込みソフト。ROM領域にデータ
-
multiple definitionというエラー
-
デバッグとビルドは何が違うの...
-
<unistd.h>をVisualStudioでつ...
-
64ビットのlinuxで32ビットメモ...
-
VC++6.0 で使用可能な、"Platfo...
-
fortranでプログラムを実行する...
-
unsigned long long 型のフォー...
-
至急おねがいします
-
LINKエラーについて
-
printfなど、標準関数のソース...
-
[c++] <pthread.h>がinclude で...
-
C#、C++間のDLLの呼び出しについて
-
ASP.Net Title メンバーではない?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
error LNK2019: 未解決の外部シ...
-
VC++6.0からVC++.NET2005へ移植
-
【VS2008 C++】2つのプロジェ...
-
OpenSSLの共有ライブラリ(libcr...
-
C言語のPathFileExistsについて
-
スタティックリンクライブラリ...
-
C++Builder リンカエラーとは?
-
VC++2008でインポートライブラ...
-
VS2010にて、依存関係とビルド順
-
make中に起こられた、tbbに関す...
-
VisualStudio の規定値が消滅した
-
C/C++の.libについて教えてくだ...
-
静的/動的リンクライブラリにつ...
-
VC++でビルド時の、リンク警告 ...
-
ShellExecute関数について(初...
-
lvwReport/エラー/プロジェクト...
-
gccでの共有ライブラリのver指定
-
operator new が再定義されてい...
おすすめ情報