
Vladimir Prus wrote:
Lorenzo Bettini wrote:
still problems (please read below)
If I do (thus, using the .a file directly)
g++ regex_use.o $HOME/boost/lib/libboost_regex.a -o regex_use_static
I don't get errors, but the binary still uses dynamic libraries:
ldd regex_use_static linux-gate.so.1 => (0xb800e000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7eff000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7ed9000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7ec9000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d66000) /lib/ld-linux.so.2 (0xb800f000)
This is expected. gcc does use shared libraries by default.
./bjam --layout=system threading=single runtime-link=static link=static install
(Note that I have omitted --build-dir, since it's not really necessary).
I did, and now get the library installed, but, again, I get:
/usr/lib/gcc/i486-linux-gnu/4.3.3/libstdc++.a(locale.o): In function `std::locale::_Impl::_M_install_cache(std::locale::facet const*, unsigned int)': (.text._ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetEj+0x2a): undefined reference to `pthread_mutex_lock'
This may suggest that libstdc++ unconditionally uses threading...
g++ -static regex_use.o -I$HOME/boost/include -L$HOME/boost/lib -lboost_regex -o regex_use_static /home/bettini/boost/lib/libboost_regex.a(static_mutex.o): In function `boost::scoped_static_mutex_lock::unlock()': static_mutex.cpp:(.text+0x16): undefined reference to `pthread_mutex_unlock' /home/bettini/boost/lib/libboost_regex.a(static_mutex.o): In function `boost::scoped_static_mutex_lock::lock()': ...
... and that causes Boost.Regex to make use of threads as well. Can you try removing everything again, and rebuild with the additional
define=BOOST_DISABLE_THREADS=1 --without-thread
options? If that does not help, it means that libstdc++ just needs threads, and there's no way around that.
Hi OK, so I managed to build it :-) this is the two command lines I've used: ./bootstrap.sh --prefix=$HOME/boost --libdir=$HOME/boost/lib --with-libraries=regex --without-icu ./bjam --build-dir=build_static --layout=system threading=single runtime-link=static link=static define=BOOST_DISABLE_THREADS=1 install I can confirm that define=BOOST_DISABLE_THREADS=1 is required, because even with threading=single the multi threading code is still built and added to the library (and this makes the library itself to depend on threads, and thus it cannot be used to build completely static binaries). Is this a bug, or the intentional behavior? If so, what does threading=single mean? thanks again Lore -- Lorenzo Bettini, PhD in Computer Science, DI, Univ. Torino ICQ# lbetto, 16080134 (GNU/Linux User # 158233) HOME: http://www.lorenzobettini.it MUSIC: http://www.purplesucker.com http://www.myspace.com/supertrouperabba BLOGS: http://tronprog.blogspot.com http://longlivemusic.blogspot.com http://www.gnu.org/software/src-highlite http://www.gnu.org/software/gengetopt http://www.gnu.org/software/gengen http://doublecpp.sourceforge.net