いくつかの静的ライブラリ (コンパイル時に静的にリンクされた *.lib ファイル) を使用する VC++ コード (VS2008 を使用してビルド) があります。
理解しやすいように、EXE コードを「AAA.EXE」と呼び、lib ファイルを「A.lib」、b.lib などと呼びます...
AAA.EXE コードと静的ライブラリ コードの両方が、VS2008 を使用して構築されています。
「AAA.EXE」が 32 ビット バージョンで正常に動作し、AAA.EXE が 64 ビット モードでビルドされている場合、以下のリンカ エラーが表示されます。
もちろん、スタティック ライブラリを 64 ビット モードで再構築し、次のように AAA.EXE に lib パスを指定しました::「AAA.EXE に対応するプロジェクト構成プロパティ -> リンカー -> 一般/入力」。
このリンカ エラーは、長い間私を悩ませてきました。どんな助けでも大歓迎です。
Logger.lib(Loggerr.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall CWTTLogger::CWTTLogger(void)" (__imp_??0CWTTLogger@@QAE@XZ)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall CWTTLogger::~CWTTLogger(void)" (__imp_??1CWTTLogger@@UAE@XZ)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionA(unsigned short *,long *)" (__imp_?FunctionA@CWTTLogger@@QAEJPAGPAJ@Z)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionB(unsigned short *,long)" (__imp_?FunctionB@CWTTLogger@@QAEJPAGJ@Z)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionC(unsigned short *,unsigned long,unsigned short *,long)" (__imp_?FunctionC@CWTTLogger@@QAEJPAGK0J@Z)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __cdecl CWTTLogger::FunctionD(unsigned long,long,...)" (__imp_?FunctionD@CWTTLogger@@QAAJKJZZ)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionE(unsigned short *,long)" (__imp_?FunctionE@CWTTLogger@@QAEJPAGJ@Z)
1>C:\Users\User1\Documents\XYZ\Code\64bit\aaa.exe: fatal error LNK1120: 7 unresolved externals
また、追加するには::
AAA.exe コードを 32 ビットから 64 ビットにするために、設定で 2 つの変更を行いました:: 1)
2)
もちろん、コードは 32 ビットと 64 ビットの両方に対応しています。VC2008 でのこれら 2 つの設定変更は、32 ビット AAA.exe コードを 64 ビット ビルドにするために完了していますか?
別のstackoverflowリンクを見ると、「プロジェクト構成プロパティ->リンカー->詳細->ターゲットマシンはデフォルトで「設定されていません」にもう1つ設定されていることがわかります。ターゲットマシン==「MACHINEx64」にすると、私が以前に得ていた別の種類のエラー::
「致命的なエラー LNK1112: モジュール マシン タイプ 'X86' がターゲット マシン タイプ 'x64' と競合しています」
リンカーオプションの「ターゲットマシン」フィールドを「未設定」または「MACHINEx64」に設定する必要があるかどうかについて、私は本当に明確にしていませんか?
「はい」の場合は、問題を解決する方法を見つける必要があります。