Hi,
I've got problems compiling a program using boost with CMake (using
Windows and MinGW 4.7.2, with -G "MinGW Makefiles"). Boost is compiled
normaly with b2.exe --toolset=gcc --prefix=C:\cppLib\boost_1_55_0 and
the folder seems to contain the right files. The original CMake-File
compiled fine using Ubuntu. I've got a code using only boost::log and a
CMake File containing the following boost-related-code:
ADD_DEFINITIONS("-std=c++0x")
SET(BOOST_ROOT "C:/cppLib/boost_1_55_0/")
link_libraries (${Boost_LIBRARIES})
find_package( Boost 1.54.0 COMPONENTS log)
if(Boost_FOUND)
MESSAGE("Boost found")
include_directories(${Boost_INCLUDE_DIRS})
add_executable(Hasselbrack ${AUTO_SOURCES})
endif()
This code works right, but when I call make, I get the following errors:
In file included from
C:/cppLib/boost_1_55_0/boost/log/expressions/formatters/c_decorator.hpp:21:0,
from C:/cppLib/boost_1_55_0/boost/log/expressions/formatters.hpp:29,
from C:/cppLib/boost_1_55_0/boost/log/expressions.hpp:26,
from C:\Users\DaGeRe\cpp\Minimalprojekt\main.cpp:3:
C:/cppLib/boost_1_55_0/boost/log/detail/snprintf.hpp:45:9: Fehler:
╗::swprintf½ wurde nicht deklariert
C:/cppLib/boost_1_55_0/boost/log/detail/snprintf.hpp:46:9: Fehler:
╗::vswprintf½ wurde nicht deklariert
In file included from
C:/cppLib/boost_1_55_0/boost/log/expressions/formatters.hpp:29:0,
from C:/cppLib/boost_1_55_0/boost/log/expressions.hpp:26,
from C:\Users\DaGeRe\cpp\Minimalprojekt\main.cpp:3:
C:/cppLib/boost_1_55_0/boost/log/expressions/formatters/c_decorator.hpp:
In statischer Elementfunktion ╗static std::size_t
boost::log::v2s_mt_nt5::exp
ressions::aux::c_decorator_traits::print_escaped(wchar_t
(&)[N], wchar_t)½:
C:/cppLib/boost_1_55_0/boost/log/expressions/formatters/c_decorator.hpp:110:43:
Fehler: ╗swprintf½ ist kein Element von ╗boost::log::v2s_mt_nt5::aux½
I tried to figure it out, the lines in snprintf are the following:
using ::snprintf;
using ::vsnprintf;
but I can't find an error in this. The Include in the beginning of the file:
#ifdef BOOST_LOG_USE_WCHAR_T
#include
#endif // BOOST_LOG_USE_WCHAR_T
seems to be exectued right (according to
http://pubs.opengroup.org/onlinepubs/7990989775/xsh/wchar.h.html,
snprintf is declared here). If I don't use
ADD_DEFINITIONS("-std=c++0x"), I got the following errors:
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x12c):
undefined reference to `boost::log::v2s_mt_nt5::core::get()'
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x143):
undefined reference to `boost::log::v2s_mt_nt5::core::set_filter(boost::log
::v2s_mt_nt5::filter const&)'
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x1c7):
undefined reference to `boost::log::v2s_mt_nt5::trivial::logger::get()'
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x20b):
undefined reference to `boost::log::v2s_mt_nt5::trivial::logger::get()'
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x2e7):
undefined reference to `std::ios_base::Init::~Init()'
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x308):
undefined reference to `std::ios_base::Init::Init()'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe:
CMakeFiles\Hasselbrack.dir/objects.a(main.cpp.obj): bad reloc address
0x1b in se
ction
`.text$_ZN5boost6detail15sp_counted_base7releaseEv[__ZN5boost6detail15sp_counted_base7releaseEv]'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe:
final link failed: Invalid operation
But nevertheless, boost is found and I can't figure out CMake seems to
be unable to link it. The output of $(Boost_LIBRARIES) from CMake also
seems correct:
C:/cppLib/boost_1_55_0/stage/lib/libboost_log-mgw47-mt-1_55.dll . So I
got no clue anymore what I could try.
Has anybody an hint how to solve this?
Best Regards,
DaGeRe