G++ не может скомпилировать код с помощью Boost для x86

У меня проблема: я написал код, используя Boost (locks.hpp). Мой сервер работает под управлением x64 Ubuntu (Linux). Когда я компилирую этот код с помощью -m64, он отлично строится. Но когда я пытаюсь скомпилировать для -m32, я получаю следующие ошибки:

g++ -fPIC -m32 -shared -Wl,-soname,test.so -ldl -o test.so test.cpp -lboost_thread

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libboost_thread.so when searching for -lboost_thread
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libboost_thread.a when searching for -lboost_thread
/usr/bin/ld: skipping incompatible //usr/lib/libboost_thread.so when searching for -lboost_thread
/usr/bin/ld: skipping incompatible //usr/lib/libboost_thread.a when searching for -lboost_thread
/usr/bin/ld: cannot find -lboost_thread
collect2: ld returned 1 exit status

Что я делаю неправильно? Спасибо!


person Robert    schedule 08.07.2012    source источник
comment
Хотя у меня нет опыта работы с G++: возможно ли, что у вас нет 32-битной версии boost (как бы я интерпретировал несовместимые вещи)...   -  person MFH    schedule 09.07.2012
comment
Вы уверены, что установили 32-битные библиотеки Boost?   -  person fvu    schedule 09.07.2012
comment
@fvu, можете ли вы дать мне команду для установки 32-битных библиотек повышения на x64 Ubuntu?   -  person Robert    schedule 09.07.2012
comment
@ Роберт, нет, извини, и когда я прочитал это askubuntu.com/questions/29665/ определенно выглядит намного сложнее, чем на openuse, который я использую...   -  person fvu    schedule 09.07.2012


Ответы (2)


Попробуйте установить 32-битный пакет Boost:

sudo apt-get install libboost-thread-dev:i386 
person Jonathan Wakely    schedule 09.07.2012
comment
К сожалению, это приводит к замене текущей 64-битной среды разработки (компилятор и многие пакеты), поэтому это слишком навязчиво. Есть ли способ иметь 32-битную и 64-битную версию рядом? - person arielf - Reinstate Monica; 10.07.2014
comment
@arielf, да, есть, но я не знаю Ubuntu, поэтому не знаю, как это сделать. Я поражен тем, что приведенная выше команда заменяет что-либо, а не просто добавляет новый пакет. - person Jonathan Wakely; 10.07.2014
comment
По моему опыту, это проблема только с наддувом. У меня есть много библиотек (язык C), установленных рядом (мультиархив: 32 и 64 бит) без проблем. Не уверен, почему создатели пакета boost *-dev:i386 заставили его конфликтовать с пакетами boost -dev по умолчанию (amd64). Поскольку у меня уже собрано/установлено несколько пакетов, которые зависят от 64-битной версии boost, предложение replaces в его пакете :i386 заставляет удалить 1) 64-битную версию boost и 2) все пакеты, которые зависят от нее. . :( - person arielf - Reinstate Monica; 11.07.2014
comment
@arielf, это не проблема с пакетами Boost в дистрибутивах, которые я использую, я бы попросил сопровождающих пакетов Ubuntu (или Debian) разобраться с этим - person Jonathan Wakely; 11.07.2014

Вам нужна 32-битная версия библиотеки потоков. ответ на ваш вопрос уже есть на stackoverflow.com. Используйте параметр address-model при создании повышения из исходного кода. Boost предоставляет отличную документацию для сборки в Linux. .

bjam address-model=32
person Dan    schedule 09.07.2012
comment
Спасибо за Ваш ответ. Можете ли вы сказать мне, как я могу добавить эти скомпилированные заголовки и библиотеки в команду g++? - person Robert; 09.07.2012
comment
Вы можете использовать утилиту boost bcp: boost. org/doc/libs/1_50_0/tools/bcp/doc/html/index.html - person Dan; 10.07.2012
comment
@Dan Если я использую BCP на 64-битной машине и перемещу сгенерированную папку на 32-битную машину, она все равно будет работать? - person Steven Roose; 17.08.2014
comment
@StevenRoose Да, это сработает. Копии BCP копируют исходные файлы и зависимости для вас; вам нужно добавить и создать исходные файлы в вашем проекте. - person Dan; 19.08.2014