CMake 链接失败

2024-04-22

我正在为 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")

这是我的 src 级 CMakeLists.txt:

#   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 ../”的输出(来自安装,顶层目录):

=> 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

非常感谢任何帮助。


代替GLOB, try GLOB_RECURSE (CMake 2.8.3 文档,文件命令 http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command%3afile),你可以这样使用:file ( GLOB_RECURSE rpdb_src "*.c" )

一个例子:

function (add_test_files)
    set ( src_files "" )

    ####################################################
    # Find all C/C++ files recursively from current dir
    ####################################################
    foreach ( ext IN ITEMS "cpp" "cxx" "cc" "c" )
        file ( GLOB_RECURSE _files "*.${ext}" )
        set ( src_files ${src_files} ${_files} )
    endforeach ()

    message ( STATUS "Found: ${src_files}" )

    add_executable ( test ${src_files} )
endfunction ()

add_test_files ()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CMake 链接失败 的相关文章

随机推荐