2014-11-07 2 views
0

Я делаю проект в 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 бит, и явно связан с ними, я не знаю, что еще делать. Есть идеи?

ответ

1

Оказывается, файлы заголовков были повышены v1.55, но библиотеки i386 использовали самую последнюю версию v1.57. Это вызвало ошибку. Построение библиотек со старым v1.55 для соответствия заголовкам устраняет проблему.

Смежные вопросы