我正在尝试使用将boost用于文件/目录操作的跨平台项目。我一直在使用Visual Studio,但是为了在Linux上进行编译,我决定切换到SConstruct。

我无法[正确吗?]链接到文件系统库。

我的SConstruct文件如下:

vLibs = [
            'libboost_system-vc100-mt-1_44.lib',
            'libboost_filesystem-vc100-mt-1_44.lib'];
# LIBS=vLibs,
env = Environment();

env.AppendUnique(CXXFLAGS=Split("/EHsc"));
env.Append(CPPPATH = ["C:\\Program Files (x86)\\boost\\boost_1_44"]);
env.Append(LIBPATH = ["C:\\Program Files (x86)\\boost\\boost_1_44\\lib"]);

env.Program( Glob('test.cpp'),LIBS=vLibs)

我不断收到类似的错误



如果使用Visual Studio,则会收到类似的错误:



直到我将库添加到项目中,之后错误才会消失并且可以正常编译(在Visual Studio中不是SConstruct)。

我已经尝试了库的每种组合(共享/未共享/运行时共享/运行时未共享/调试),但是我总是遇到相同的错误。

最近6个小时以来一直在寻找答案,非常感谢您的帮助。

注意:我不使用自动链接(#define BOOST_ALL_NO_LIB),因为gcc不支持它)

这是Scons的输出:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...


link /nologo /OUT:build\test.exe "/LIBPATH:C:\Program Files (x86)\boost\boost_1_44\lib" libboost_system-vc100-mt-1_44.lib     libboost_filesystem-vc100-mt-1_44.lib build\test.obj
test.obj : error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl     boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'posix_category''(void)" (??    __Eposix_category@system@boost@@YAXXZ)
test.obj : error LNK2019: unresolved external symbol "class boost::system::error_category const & __cdecl     boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ) referenced in function "void __cdecl boost::system::`dynamic initializer for 'native_ecat''(void)" (??    __Enative_ecat@system@boost@@YAXXZ)
build\test.exe : fatal error LNK1120: 2 unresolved externals
scons: *** [build\test.exe] Error 1120
scons: building terminated because of errors.

最佳答案

我得到了完全相同的错误,直到我使用address-model = 64参数将boost重建为bjam

08-27 02:16