【问题标题】:cmake: library dependent on another library (sqlite3pp)cmake:依赖于另一个库的库(sqlite3pp)
【发布时间】:2015-04-18 01:27:24
【问题描述】:

我正在尝试将cmake sqlite3pp 库链接到我的应用程序,而这又取决于sqlite。所以依赖图如下:

my_app  --> sqlite3pp  --> sqlite

一个很好用但分发太笨拙的技巧(我使用git submodule)是将sqlite放入libs/sqlite3pp/src中:

project
|___ src    # my project
|___ libs   # libraries
|      |___ sqlite3pp
|      |        |___ src
|      |              |___sqlite   # I copy it here; clumsy  :-(
...    ...

sqlite3pp/src/CMakeLists.txt 中有以下行:

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/sqlite3")

但是,git submodule 会造成很大的混乱,因为我需要修改子模块。所以我尝试将sqlite 目录向上拉两级,进入libs 目录:

project
|___ src    # my project
|___ libs   # libraries
|      |___ sqlite3pp
|               |___ src
|
|___ sqlite   # Now it looks better
...    ...

现在,我尝试的两种方法都不起作用(我对cmake 很陌生):

1) 当我用

替换上面的语句时
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../sqlite3")

cmake 无法识别相对路径。

2) 尝试通过以下几行管理来自project/CMakeLists.txt 文件的链接:

set(sqlite_path "${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite")
include_directories(sqlite_path)
add_subdirectory( sqlite_path )
add_library(sqlite3 STATIC "${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite/sqlite3.c")

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite3pp/src")
add_subdirectory("libs/sqlite3pp/src")


TARGET_LINK_LIBRARIES(sqlite3pp "${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite/sqlite3.c" )
target_include_directories( sqlite3pp PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite> )

导致cmake看起来成功的情况,但是在make成功编译两个库后,将它们链接到项目时,我收到一堆“未定义引用”错误:

linking CXX executable ../../bin/myapp-1.0.0/myapp
../libs/sqlite3pp/src/libsqlite3pp.so: undefined reference to `pthread_mutex_trylock'
...

有什么想法吗?

【问题讨论】:

    标签: c++ sqlite cmake git-submodules


    【解决方案1】:

    要解决链接器错误,请使用 Threads 包和其中的 CMAKE_THREAD_LIBS_INIT 变量:

    find_package(Threads REQUIRED)
    target_link_libraries(libsqlite3pp ${CMAKE_THREAD_LIBS_INIT})
    

    详情请见FindThreads

    【讨论】:

    • 神奇!谢谢!我在哪里可以看到“系统的线程库”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2017-10-26
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2018-08-25
    相关资源
    最近更新 更多