我正在尝试使用firebreath的boost 1.46.0。我已经阅读了firebreath wiki上的建筑与外部增强,但还没有能够弄清楚。
我将boost下载到~/boost_1_46_0并使用bjam编译它。我这样调用premake .sh:
prepmake.sh projectdir builddir -DCMAKE_BUILD_TYPE="Release"
-DVERBOSE=1
-DWITH_SYSTEM_BOOST=1
-DBOOST_ROOT="~/boost_1_46_0/"
-DBoost_USE_STATIC_LIBS=on
-DBoost_USE_STATIC_RUNTIME=off
Prepmake成功。然后我在firebreath构建目录中调用make,但在最后遇到链接错误。
Linking CXX shared library ../../bin/Test/npTest.so
../../ScriptingCore/libScriptingCore.a(URI.cpp.o): In function `global constructors keyed to URI.cpp':
URI.cpp:(.text+0x637): undefined reference to `boost::system::generic_category()'
URI.cpp:(.text+0x643): undefined reference to `boost::system::generic_category()'
URI.cpp:(.text+0x64f): undefined reference to `boost::system::system_category()'
URI.cpp:(.text+0x65b): undefined reference to `boost::system::system_category()'
../../ScriptingCore/libScriptingCore.a(URI.cpp.o): In function `FB::URI::isLocalhost() const':
URI.cpp:(.text+0x3065): undefined reference to `boost::system::system_category()'
URI.cpp:(.text+0x3095): undefined reference to `boost::system::system_category()'
URI.cpp:(.text+0x32ed): undefined reference to `boost::system::system_category()'
../../ScriptingCore/libScriptingCore.a(URI.cpp.o):URI.cpp:(.text+0x3569): more undefined references to `boost::system::system_category()' follow
谢谢达伦
看起来您错过了boost-system库
我必须在项目的PluginConfig.cmake中设置firebreath使用的boost库:
add_boost_library(date_time)
add_boost_library(regex)
add_boost_library(system)
add_boost_library(thread)
奇怪的是,firebreath似乎会自动找到它们(见下文),但除非我手动指定add_boost_library,否则链接器不会意识到它们:
-- Boost version: 1.46.0
-- Found the following Boost libraries:
-- thread
-- system
-- Boost version: 1.46.0
-- Found the following Boost libraries:
-- thread
-- system
-- date_time
-- Boost version: 1.46.0
-- Found the following Boost libraries:
-- thread
-- system
-- date_time
-- regex
-- Configuring done
-- Generating done
我有一个类似的问题(在VS2013上使用外部boost 1.56)链接失败,说它找不到boost date_time和regex的库。
使用
添加add_boost_library(date_time)
add_boost_library(regex)
没有效果,但是这为我解决了这个问题:
link_boost_library(${PLUGIN_NAME} date_time)
link_boost_library(${PLUGIN_NAME} regex)
以备将来有人偶然发现这个问题时参考。