解決できない奇妙なリンカ エラーがあります。このプロジェクトは、実際には Linux 上のシステムの Windows ポートであるため、Windows へのポートの前にすべてが機能していることがわかります。
私は FTGL (OpenGL フォント ライブラリ) を VS2013 を使用してスタティック ライブラリとしてコンパイルしており (正常にコンパイルされます)、そのスタティック ライブラリを DLL で使用しています。ただし、私が知る限り、そこにあるシンボルが見つからないというリンカーエラーが発生します。
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall FTPoint::FTPoint(void)" (__imp_??0FTPoint@@QAE@XZ) referenced in function "public: virtual void __thiscall FPSCounter::draw(class Projector const *)" (?draw@FPSCounter@@UAEXPBVProjector@@@Z) E:\Desktop\libWCLVS\fpsCounter\fpsCounter.obj fpsCounter
Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall FTPoint::FTPoint(double,double,double)" (__imp_??0FTPoint@@QAE@NNN@Z) referenced in function "public: virtual void __thiscall FPSCounter::draw(class Projector const *)" (?draw@FPSCounter@@UAEXPBVProjector@@@Z) E:\Desktop\libWCLVS\fpsCounter\fpsCounter.obj fpsCounter
"dumpbin.exe /symbols" on the FTGL static lib shows the following (amongst the rest):
1E5 00000000 SECT10 notype () External | ??0FTPoint@@QAE@XZ (public: __thiscall FTPoint::FTPoint(void))
1E6 00000000 SECTE notype () External | ??0FTPoint@@QAE@NNN@Z (public: __thiscall FTPoint::FTPoint(double,double,double))
これまでのところ、静的ライブラリと DLL を別々の VS ソリューション (両方のデバッグ ビルド) でコンパイルしています。既存の静的 lib VS プロジェクトを DLL ソリューションにインポートし、プロジェクトの を介してその参照を作成するとCommon Properties -> References
、DLL は正常にコンパイル、リンク、および実行されます (デバッグ ビルドとしても)。同じプロジェクトを別のソリューションで使用しているため、同じプロジェクトをコンパイルするため、同じ未定義のシンボルが必要になるため、これは奇妙に思えます。
明らかに、VSは、同じソリューション内にある場合と、libをエクスポートしてからリンクする場合とで、それらをリンクする際に何か異なることをしています。なぜ私がこの種の振る舞いをするのか、そしてそれを解決するために何ができるかを誰かが知っていますか?