Я настраиваю свой проект для CMake, и у меня возникают проблемы со связыванием - все файлы проекта компилируются успешно, затем он говорит, что связывает и сообщает о всевозможных символах, не найденных
Эти символы в основном предоставлены моим собственным кодом, в то время как некоторые из них предоставлены BerkeleyDB, который правильно расположен и включен.
Вот мой высокоуровневый CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project( rpdb C )
# add local modules path for project
set( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/" )
# where to look for source files (headers and source)
include_directories( include src )
# define sub-directories of source that cmake knows about as well a where their output will be put
add_subdirectory( src bin )
# compiler-dependent flags:
if( CMAKE_COMPILER_IS_GNUCC )
# gcc
add_definitions( -ggdb -fsigned-char -freg-struct-return -Wall -W -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Winline -Werror )
else( CMAKE_COMPILER_IS_GNUCC )
# non-gcc (intended for clang)
add_definitions( -ggdb -fsigned-char -Wall -W -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Winline -Werror )
endif( CMAKE_COMPILER_IS_GNUCC )
# distribution configuration
set(CMAKE_C_FLAGS_DISTRIBUTION "-O3")
set(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3")
А вот мой CMakeLists.txt уровня src:
# make sure we have libdb
find_package( BerkeleyDB REQUIRED )
include_directories( ${libdb_INCLUDE_DIRS} )
target_link_libraries( rpdb ${libdb_LIBRARIES} )
# define variable specifying included source files - all .c files below this directory
file( GLOB rpdb_src "**/*.c" )
# define shared library with sources
add_library( rpdb SHARED ${rpdb_src} )
Выход (частичный):
...
[100%] Building C object bin/CMakeFiles/rpdb.dir/RPDB_TransactionController/RPDB_TransactionController.c.o
Linking C shared library librpdb.dylib
Undefined symbols:
"_RPDB_ReplicationVerbositySettingsController_displayMessageProcessingInformation", referenced from:
_RPDB_SettingsController_internal_setVerbosity in RPDB_SettingsController.c.o
...
Все символы do фактически существуют. Кажется, что результат возникает для символов в объектных файлах, отличных от того, который он просматривает в данный момент.
Вывод из "cmake ../" (из install, каталог верхнего уровня):
=> cmake ..
-- Found BerkeleyDB: /usr/local/lib/libdb.dylib
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/ahaig/Projects/RPDB/RPDB_C/install
Любая помощь высоко ценится.