C++11 用C+编译Bzip2+;11

C++11 用C+编译Bzip2+;11,c++11,cmake,bzip2,makefile-project,C++11,Cmake,Bzip2,Makefile Project,我正试图用C++11编译,但我无法使它工作。问题似乎出在内部使用的BZip2库上。更具体地说,有一个包装器称为BZIP2WrPrPress,提供一个C++接口到C库。C库的所有文件都包含在同一文件夹中。当使用默认的make文件时,一切正常,但当我更改 project(multiboost) 到 我得到以下错误: libMultiBoostLib.a(Serialization.cpp.o): In function `Bzip2WrapperReader::open(char cons

我正试图用C++11编译,但我无法使它工作。问题似乎出在内部使用的BZip2库上。更具体地说,有一个包装器称为BZIP2WrPrPress,提供一个C++接口到C库。C库的所有文件都包含在同一文件夹中。当使用默认的make文件时,一切正常,但当我更改

project(multiboost)

我得到以下错误:

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)
你知道会出什么问题吗?我甚至不知道问题出在哪里。
谢谢

这看起来不像是C++11错误,而是生成系统中的错误

我没有看过代码,但是从输出中您添加了如下内容

# 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)

目标链接库(多boostlib公共Bzip2Lib)


应该在libBzip2Lib上添加libMultiBoostLib缺少的依赖项。

我发现了问题。我在项目描述中添加了“CXX”,这禁用了C语言的使用。因此无法编译库(C语言)。将其更改为“project(name C CXX)”解决了此问题。然后,我还需要包括行“set(CMAKE_CXX_FLAGS“${CMAKE_CXX_FLAGS}-std=c++11”)以启用c++11支持。现在一切正常


非常感谢

这看起来不像我见过的任何makefile。@SamVarshavchik项目似乎正在使用CMake,这是一个现在常用的元构建系统。是的,我的意思是CMakeList文件将更新问题。