Boost logo

Boost Users :

Subject: Re: [Boost-users] Cross-Compile Boost for Embedded Linux
From: Richard Ketcham (rich.ketcham_at_[hidden])
Date: 2008-09-17 13:05:42


Oh wow. Yep, that's seems to be exactly what happened. I rebuilt gcc with
linuxthreads enabled, here's the output after doing that:

rich_at_rich-desktop:~/gumstix/gumstixLatest/build_arm_nofpu/staging_dir/bin$
./arm-linux-gcc-4.1.1 -v

Using built-in specs.
Target: arm-linux-uclibcgnueabi
Configured with:
/home/rich/gumstix/gumstixLatest/toolchain_build_arm_nofpu/gcc-4.1.1/configure
--prefix=/home/rich/gumstix/gumstixLatest/build_arm_nofpu/staging_dir
--build=i386-pc-linux-gnu --host=i386-pc-linux-gnu
--target=arm-linux-uclibcgnueabi --enable-languages=c,c++ --enable-shared
--disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls
--enable-threads --disable-multilib --with-float=soft --with-cpu=iwmmxt
--with-arch=armv5te --with-tune=iwmmxt --without-fp
Thread model: posix
gcc version 4.1.1

The thread library seems to compile fine:

rich_at_rich-desktop:~/boost_1_36_0$ bjam --toolset=gcc-arm -sNO_BZIP2=1
--variant=release --with-thread stage
warning: Graph library does not contain optional GraphML reader.
note: to enable GraphML support, set EXPAT_INCLUDE and EXPAT_LIBPATH to the
note: directories containing the Expat headers and libraries, respectively.
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
Building Boost.Regex with the optional Unicode/ICU support disabled.
Please refer to the Boost.Regex documentation for more information
(don't panic: this is a strictly optional feature).
...patience...
...found 722 targets...
...updating 25 targets...
MkDir1-quick-fix-for-unix stage
MkDir1-quick-fix-for-unix stage/lib
MkDir1-quick-fix-for-unix bin.v2
MkDir1-quick-fix-for-unix bin.v2/libs
MkDir1-quick-fix-for-unix bin.v2/libs/thread
MkDir1-quick-fix-for-unix bin.v2/libs/thread/build
MkDir1-quick-fix-for-unix bin.v2/libs/thread/build/gcc-arm
MkDir1-quick-fix-for-unix bin.v2/libs/thread/build/gcc-arm/release
MkDir1-quick-fix-for-unix
bin.v2/libs/thread/build/gcc-arm/release/threading-multi
gcc.compile.c++
bin.v2/libs/thread/build/gcc-arm/release/threading-multi/thread.o
gcc.compile.c++
bin.v2/libs/thread/build/gcc-arm/release/threading-multi/exceptions.o
gcc.compile.c++
bin.v2/libs/thread/build/gcc-arm/release/threading-multi/once.o
gcc.link.dll
bin.v2/libs/thread/build/gcc-arm/release/threading-multi/libboost_thread-gcc-mt-1_36.so.1.36.0
common.copy stage/lib/libboost_thread-gcc-mt-1_36.so.1.36.0
ln-UNIX stage/lib/libboost_thread-gcc-mt-1_36.so
ln-UNIX stage/lib/libboost_thread-gcc-mt.so
MkDir1-quick-fix-for-unix
bin.v2/libs/thread/build/gcc-arm/release/link-static
MkDir1-quick-fix-for-unix
bin.v2/libs/thread/build/gcc-arm/release/link-static/threading-multi
gcc.compile.c++
bin.v2/libs/thread/build/gcc-arm/release/link-static/threading-multi/thread.o
gcc.compile.c++
bin.v2/libs/thread/build/gcc-arm/release/link-static/threading-multi/exceptions.o
gcc.compile.c++
bin.v2/libs/thread/build/gcc-arm/release/link-static/threading-multi/once.o
gcc.archive
bin.v2/libs/thread/build/gcc-arm/release/link-static/threading-multi/libboost_thread-gcc-mt-1_36.a
common.copy stage/lib/libboost_thread-gcc-mt-1_36.a
ln-UNIX stage/lib/libboost_thread-gcc-mt.a
...updated 25 targets...
rich_at_rich-desktop:~/boost_1_36_0$

However, when I go to compile the thread.cpp example (I commented out the
other examples in the Jamfile.v2) in ~/boost_1_36_0/libs/thread/example/, it
errors out:

rich_at_rich-desktop:~/boost_1_36_0/libs/thread/example$ bjam --toolset=gcc-arm
--variant=release

warning: Graph library does not contain optional GraphML reader.
note: to enable GraphML support, set EXPAT_INCLUDE and EXPAT_LIBPATH to the
note: directories containing the Expat headers and libraries, respectively.
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
Building Boost.Regex with the optional Unicode/ICU support disabled.
Please refer to the Boost.Regex documentation for more information
(don't panic: this is a strictly optional feature).
...patience...
...found 719 targets...
...updating 1 target...
gcc.link
../../../bin.v2/libs/thread/example/gcc-arm/debug/threading-multi/thread
../../../bin.v2/libs/thread/example/gcc-arm/debug/threading-multi/thread.o:
In function `__static_initialization_and_destruction_0':
/home/rich/gumstix/gumstixLatest/build_arm_nofpu/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../include/c++/4.1.1/iostream:76:
undefined reference to `std::ios_base::Init::Init()'
/home/rich/gumstix/gumstixLatest/build_arm_nofpu/staging_dir/lib/gcc/arm-linux-uclibcgnueabi/4.1.1/../../../../include/c++/4.1.1/iostream:76:
undefined reference to `std::ios_base::Init::~Init()'
../../../bin.v2/libs/thread/example/gcc-arm/debug/threading-multi/thread.o:
In function `main':
/home/rich/boost_1_36_0/libs/thread/example/thread.cpp:31: undefined
reference to `std::basic_ostream<char, std::char_traits<char> >&
std::operator<< <std::char_traits<char> >(std::basic_ostream<char,
std::char_traits<char> >&, char const*)'
/home/rich/boost_1_36_0/libs/thread/example/thread.cpp:31: undefined
reference to `std::basic_ostream<char, std::char_traits<char>
>::operator<<(std::basic_ostream<char, std::char_traits<char> >&
(*)(std::basic_ostream<char, std::char_traits<char> >&))'
/home/rich/boost_1_36_0/libs/thread/example/thread.cpp:34: undefined
reference to `__cxa_end_cleanup'
/home/rich/boost_1_36_0/libs/thread/example/thread.cpp:35: undefined
reference to `std::cout'
/home/rich/boost_1_36_0/libs/thread/example/thread.cpp:35: undefined
reference to `std::basic_ostream<char, std::char_traits<char> >&
std::endl<char, std::char_traits<char> >(std::basic_ostream<char,
std::char_traits<char> >&)'
../../../bin.v2/libs/thread/example/gcc-arm/debug/threading-multi/thread.o:(.ARM.extab+0x24):
undefined reference to `__gxx_personality_v0'
../../../bin.v2/libs/thread/example/gcc-arm/debug/threading-multi/thread.o:
In function `mutex':
/home/rich/boost_1_36_0/libs/thread/example/../../../boost/thread/pthread/mutex.hpp:40:
undefined reference to `__cxa_allocate_exception'
/home/rich/boost_1_36_0/libs/thread/example/../../../boost/thread/pthread/mutex.hpp:40:
undefined reference to `__cxa_throw'
/home/rich/boost_1_36_0/libs/thread/example/../../../boost/thread/pthread/mutex.hpp:40:
undefined reference to `__cxa_free_exception'
/home/rich/boost_1_36_0/libs/thread/example/../../../boost/thread/pthread/mutex.hpp:42:
undefined reference to `__cxa_end_cleanup'
../../../bin.v2/libs/thread/example/gcc-arm/debug/threading-multi/thread.o:(.ARM.extab.text._ZN5boost5mutexC1Ev[boost::mutex::mutex()]+0x0):
undefined reference to `__gxx_personality_v0'

....etc... I didn't think you needed to see the rest of this.

What do you think is the problem? It's referencing iostream.h ... my using
command is defined as follows:

 using gcc : arm :
/home/rich/gumstix/gumstixLatest/build_arm_nofpu/staging_dir/bin/arm-linux-gcc-4.1.1
:
<cxxflags>-I/home/rich/gumstix/gumstixLatest/build_arm_nofpu/staging_dir/usr/include/
;

Thanks again,
Rich

-- 
There is nothing more practical than a good theory.
James Maxwell


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net