Boost построен проект на i386 не удается связать - PullRequest
0 голосов
/ 17 мая 2018

Я использую проект с именем «GenericMod», который внутренне использует библиотеку надстроек 1.58.0.

Ранее надстройка 1.58 была скомпилирована в Red Hat Enterprise Linux Server версии 5.8 (Tikanga)

чей вывод gcc -v был следующим

Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-55)

Он был скомпилирован с использованием следующей команды

./b2 install -a --includedir=testbuild/include --libdir=testbuild/lib --layout=system variant=release target-os=linux link=static runtime-link=static address-model=32 cxxflags=-fPIC

Теперь, когда проект "GenericMod" был собран на той же машине,сборка прошла успешно и ошибки не было.

Но недавно среда сборки была изменена.Сейчас проект строится на новом компьютере, который представляет собой Red Hat Enterprise Linux Server версии 5.9 (Tikanga)

и его вывод gcc -v

Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)

Когда проект построен на этомТеперь на компьютере я получал ошибки компоновщика (вероятно, поскольку библиотеки boost были собраны в другой среде).

Поэтому я снова создал на этой машине boost 1.58.0 с той же командой build.

./b2 install -a --includedir=testbuild/include --libdir=testbuild/lib --layout=system variant=release target-os=linux link=static runtime-link=static address-model=32 cxxflags=-fPIC

Теперь, когда проект построен на этой машине, я понимаю, что не должно быть никаких ошибок, и сборка должна проходить через фазу соединения.

Но ошибка компоновщика все еще происходит.

libboost_thread.a(thread.o): In function `boost::thread::physical_concurrency()':
thread.cpp:(.text+0x2084): undefined reference to `std::ctype<char>::_M_widen_init() const'

Может кто-нибудь объяснить, почему это происходит?На прошлой неделе я ломал голову за это и не мог получить достаточно объяснений в других местах.

Должен ли я включить какой-либо флаг, чтобы указать сборку для i386?

Заранее спасибо

...