diff --git a/OpenSolarisInstallation_TroubleShooting.md b/OpenSolarisInstallation_TroubleShooting.md index 1d82b4d..b5013ed 100644 --- a/OpenSolarisInstallation_TroubleShooting.md +++ b/OpenSolarisInstallation_TroubleShooting.md @@ -10,8 +10,9 @@ *description*: You get a compile error when building boost python like: - #!sh +```sh ./boost/python/converter/rvalue_from_python_data.hpp:99: error: '->' cannot appear in a constant-expression +``` *solution*: You are likely compiling boost with the default gcc on Open Solaris (`gcc version 3.4.3 (csl-sol210-3_4-20050802)`). The only solution found is to upgrade to gcc 4.4 @@ -20,7 +21,7 @@ *description*: You get a compile error when building boost python like: - #!sh +```sh "/usr/gcc/4.3/bin/g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pthreads -fPIC -DBOOST_ALL_NO_LIB=1 -DBOOST_PYTHON_SOURCE -DNDEBUG -I"." -I"/usr/include/python2.6" -c -o "bin.v2/libs/python/build/gcc-4.3.3/release/threading-multi/converter/registry.o" "libs/python/src/converter/registry.cpp" ./boost/python/converter/registrations.hpp: In member function ‘boost::python::converter::registration& boost::python::converter::registration::operator=(const boost::python::converter::registration&)’: ./boost/python/converter/registrations.hpp:35: instantiated from ‘void __gnu_cxx::_SGIAssignableConcept<_Tp>::__constraints() [with _Tp = boost::python::converter::registration]’ @@ -30,6 +31,7 @@ ./boost/python/converter/registrations.hpp:35: error: non-static const member ‘const bool boost::python::converter::registration::is_shared_ptr’, can't use default assignment operator /usr/gcc/4.3/lib/gcc/i386-pc-solaris2.11/4.3.3/../../../../include/c++/4.3.3/bits/boost_concept_check.h: In member function ‘void __gnu_cxx::_SGIAssignableConcept<_Tp>::__constraints() [with _Tp = boost::python::converter::registration]’: /usr/gcc/4.3/lib/gcc/i386-pc-solaris2.11/4.3.3/../../../../include/c++/4.3.3/bits/boost_concept_check.h:209: note: synthesized method ‘boost::python::converter::registration& boost::python::converter::registration::operator=(const boost::python::converter::registration&)’ first required here +``` *solution*: You are likely compiling boost with the more recent gcc 4.3.3. that can be download like: @@ -49,29 +51,30 @@ The only solution known is to upgrade to gcc 4.4 *solution:* Basically, Scons is running compile tests and they fail because g++ is broken because our custom built g++'s c++ standard lib is linked again the system g++, and we need to get it to link its own g++ version. Normally `export LD_LIBRARY_PATH=/opt/ts/gcc/4.4/lib/` would fix this by prioritizing linking, but on solaris LD_LIBRARY_PATH does not take precedence like on linux (read: it's broke). So, the (only known) workaround is to forcefully change the symlink: - - #!sh +```sh pfexec rm /usr/lib/libgcc_s.so pfexec ln -s /opt/ts/gcc/4.4/lib/libgcc_s.so /usr/lib/libgcc_s.so - +``` ## Mapnik Compile errors *description:* When configuring Mapnik SCons fails on boost and the 'config.log' reports: - +``` Undefined first referenced symbol in file std::ctype::_M_widen_init() const/usr/local/lib/libboost_regex.so std::basic_ostream >& std::basic_ostream >::_M_insert(unsigned long)/usr/local/lib/libboost_regex.so std::basic_ostream >& std::__ostream_insert >(std::basic_ostream >&, char const*, int)/usr/local/lib/libboost_regex.so +``` or - +``` Undefined first referenced symbol in file std::bad_alloc::what() const /usr/local/lib/libboost_iostreams.so +``` *solution:* The Mapnik SCons dependency checks are using an old version of g++ and you need to force gcc44: