我正在尝试使用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)
任何想法可能出错?我甚至不知道问题是什么。 谢谢!
答案 0 :(得分:0)
这看起来不像C ++ 11错误,而是构建系统中的错误。
我没有查看代码,但是从输出中你添加了类似的内容
target_link_libraries(MultiBoostLib PUBLIC Bzip2Lib)
应该在libBzip2Lib上添加libMultiBoostLib中缺少的依赖项。
答案 1 :(得分:0)
我发现了问题。我在我的项目描述中添加了“CXX”,禁用了C的使用。因此无法编译库(在C中)。将其更改为“项目(名称C CXX)”解决了此问题。然后我还需要包含“set(CMAKE_CXX_FLAGS”$ {CMAKE_CXX_FLAGS} -std = c ++ 11“)”行以启用C ++ 11支持。现在一切正常。
非常感谢!