Компиляция Bzip2 с C++11

Я пытаюсь скомпилировать библиотеку MultiBoost с C++11, но не могу заставить ее работать. Проблема, кажется, с библиотекой 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)

Есть идеи, что может пойти не так? Я даже не знаю, в чем проблема. Спасибо!

2 ответа

Это не похоже на ошибку C++11, а на ошибку в системе сборки.

Я не смотрел на код, но из вывода вы добавили что-то вроде этого

target_link_libraries(MultiBoostLib PUBLIC Bzip2Lib)

следует добавить отсутствующую зависимость от libMultiBoostLib на libBzip2Lib.

Я нашел проблему. Я добавлял "CXX" в описание моего проекта, что запрещало использование C. Поэтому библиотеки (в C) не могли быть скомпилированы. Изменение его на "проект (имя C CXX)" решило эту проблему. Затем мне также нужно было включить строку "set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std= C++11")", чтобы включить поддержку C++ 11. Сейчас все работает.

Большое спасибо!

Другие вопросы по тегам