Я делаю проект в Mac OSX и использую библиотеки с форсированным скомпилированием (например, сериализацию). Я установил все мои зависимости как библиотеки x86_64, но теперь хочу явно указать 32-битные (i386) и перекомпилировать мой проект для 32-битных пользователей.ошибка, связанная с 32-битной библиотекой boost с g ++
Я перекомпилирован библиотекой с g++ -m32
в случае необходимости, а затем снова из 32 библиотек битого подталкивания с помощью
./bootstrap.sh link=static
./b2 cflags=-m32 cxxflags=-m32 address-model=32 threading=multi architecture=x86 instruction-set=i686
Затем я перекомпилировать проект, явно связывая с битными библиотеками 32. Так что-то вроде
g++ file.cpp /usr/local/lib/boost_i386/libboost_serialization.a -m32 -o executable
где библиотека явно 32-битная версия проверена с помощью otool
следующим образом с (частичной) продукции (весь список CPUTYPE в i386)
otool -hv -arch all libboost_serialization.a
Archive : libboost_serialization.a
libboost_serialization.a(basic_archive.o):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC I386 ALL 0x00 OBJECT 3 1180 SUBSECTIONS_VIA_SYMBOLS
Однако, когда я компилирую мой проект (несмотря на большинство зависимостей работает отлично), он срабатывает и что символы не хватает для этой архитектуры
Явное:
Undefined symbols for architecture i386:
"boost::archive::detail::shared_ptr_helper::shared_ptr_helper()", referenced from:
boost::archive::binary_iarchive::binary_iarchive(std::basic_istream<char, std::char_traits<char> >&, unsigned int)in ccCH1ama.o
"boost::archive::detail::shared_ptr_helper::~shared_ptr_helper()", referenced from:
boost::archive::binary_iarchive::~binary_iarchive()in ccCH1ama.o
boost::archive::binary_iarchive::~binary_iarchive()in ccCH1ama.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
Я явно построил 32-битные библиотеки, проверил, что они на самом деле 32 бит, и явно связан с ними, я не знаю, что еще делать. Есть идеи?