SConsを使用して、静的ライブラリや Visual Studio プロジェクト ファイル (.sln、.vcxproj) の生成など、プロジェクトをビルドしています。SConstruct ファイル (Python で記述) では、次のように指定します。
CCFLAGS=['/Od','/Zi','/EHsc','/W3']
env=Environment(ENV=ENV,CPPPATH=include_path,CCFLAGS=CCFLAGS,MSVS_ARCH=arc,TARGET_ARCH=arc)
lib=env.StaticLibrary(target=lib_file,source=lib_src_files)
proj=env.MSVSProject(target=name+env['MSVSPROJECTSUFFIX'],srcs=lib_src_files,incs=lib_header_files,buildtarget=lib,variant=build_type,auto_build_solution=0)
VS プロジェクト ファイルと静的ライブラリを作成します。すべてがうまくいき、最終的にライブラリを取得します。しかし、これらのライブラリを他のカスタム プロジェクトでサードパーティ ライブラリとして使用すると、以下が生成されますlnk2009 error
。
error 1 error LNK2019: unresolved external symbol "public: virtual
__thiscall Physika::Vector<double,3>::~Vector<double,3>(void)" (??1?$Vector@N$02@Physika@@UAE@XZ),referenced in function
_tmain() C:\Users\suitmyself\documents\visual studio 2010\Projects\Physika_config\Physika_config\vector3d_test.obj
error 2 error LNK2019: unresolved external symbol "public: __thiscall Physika::Vector<double,3>::Vector<double,3>(double,double,double)" (??0?$Vector@N$02@Physika@@QAE@NNN@Z),referenced in function
_tmain() C:\Users\suitmyself\documents\visual studio 2010\Projects\Physika_config\Physika_config\vector3d_test.obj
ここでの VS プロジェクトは手動で生成されることに注意してください。パス (ヘッド ファイル) とライブラリ パスが含まれていることを確認してください。ライブラリ ファイルはエラーなしで構成され、ライブラリ ファイルは正しく検出されます。.obj がライブラリ ファイル内の正しいシンボルと一致しないため、この lnk エラーが発生するようです。
ただし、奇妙なことに、SCons を使用して VS プロジェクトを構築し、上記のように CCFLAGS を指定すると、lnk エラーが検出されず、EXE が正常に生成され、すべてが正常に動作します。
では、なぜこのエラーが表示されるのでしょうか?