Я пытаюсь работать над кроссплатформенным проектом, который использует 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)
Я получаю сообщения об ошибках типа
test.obj: ошибка LNK2019: неразрешенный внешний символ «повышение класса :: system :: error_category const & __cdecl boost :: system :: generic_category (void)» (? Generic_category @ system @ boost @@ YAAEBVerror_category @ 12 @ XZ ) упоминается в функции "void __cdecl boost :: system ::` динамический инициализатор для 'posix_category' '(void) "(?? __ Eposix_category @ system @ boost @@ YAXXZ)
Если я использую visual studio, я получаю похожие ошибки:
Ошибка 2, ошибка LNK2001: неразрешенный внешний символ "class boost :: system :: error_category const & __cdecl boost :: system :: generic_category (void)" (? Generic_category @ system @ boost @@ YAABVerror_category @ 12 @ XZ) T : \ VS \ temp \ test.obj temp
До тех пор, пока я не добавлю библиотеки в проект, после чего ошибки исчезнут, и он прекрасно скомпилируется (в visual studio не SConstruct).
Я пробовал каждую комбинацию библиотек (shared / unshared / runtime-shared / runtime-unshared / debug), но я всегда получаю одни и те же ошибки.
Я искал ответ в течение последних 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.