0

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 が正常に生成され、すべてが正常に動作します。

では、なぜこのエラーが表示されるのでしょうか?

4

1 に答える 1