我正在尝试用C++11编译MultiBoost Library,但是我不能让它工作。问题似乎出在内部使用的BZip2库上。更具体地说,有一个名为Bzip2Wrapper的包装器,它为C库提供c++接口。C库的所有文件都包含在同一个文件夹中。当使用默认的make文件时,一切正常,但当我更改
project(multiboost)至
project(multiboost CXX)我得到以下错误:
libMultiBoostLib.a(Serialization.cpp.o): In function `Bzip2WrapperReader::open(char const*)':
Serialization.cpp:(.text._ZN18Bzip2WrapperReader4openEPKc[_ZN18Bzip2WrapperReader4openEPKc]+0x97): undefined reference to `BZ2_bzReadOpen'
Serialization.cpp:(.text._ZN18Bzip2WrapperReader4openEPKc[_ZN18Bzip2WrapperReader4openEPKc]+0xc5): undefined reference to `BZ2_bzReadClose'
libMultiBoostLib.a(Serialization.cpp.o): In function `Bzip2WrapperReader::close()': ...CMakeList文件如下所示
# Bzip2
file(GLOB bzip2_SRCS "${BASEPATH}/Bzip2/*.cpp" "${BASEPATH}/Bzip2/*.c" "${BASEPATH}/Bzip2/*.h")
add_library(Bzip2Lib STATIC ${bzip2_SRCS})
#add_library(bzip2 SHARED ${bzip2_lib_SRCS})
...
# adding library to the exec
target_link_libraries(multiboost MultiBoostLib Bzip2Lib)你知道会出什么问题吗?我甚至不知道问题出在哪里。谢谢!
发布于 2015-03-30 17:18:30
这看起来不像是C++11错误,而是构建系统中的错误。
我没有看过代码,但是您从输出中添加了如下内容
target_link_libraries(MultiBoostLib PUBLIC Bzip2Lib)
应该在libBzip2Lib上添加libMultiBoostLib中缺少的依赖项。
发布于 2015-03-30 18:24:24
我找到问题了。我将"CXX“添加到我的项目描述中,这将禁止使用C。因此,无法编译这些库(用C编写)。将其更改为"project(name C CXX)“解决了此问题。然后我还需要包含行"set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")“来启用C++11支持。现在一切都正常了。
非常感谢!
https://stackoverflow.com/questions/29334607
复制相似问题