我们正在使用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 正常生成。
那么为什么会出现这个错误呢?