Компиляция 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. Сейчас все работает.
Большое спасибо!