【问题标题】:Cannot find library with simple C++ example找不到带有简单 C++ 示例的库
【发布时间】:2015-02-06 01:37:13
【问题描述】:

我正在使用 cmake 在 Ubuntu 中构建一个名为 alpha 的 C++ 库,其中包含一个源文件:

cmake_minimum_required(VERSION 2.8)

project(Alpha)

add_library (alpha alpha.cpp)

这将创建一个名为libalpha.a 的文件,我现在要链接到该文件。因此,我将其复制到另一个名为beta 的 C++ 项目的源目录中,其中也包含一个源文件:

cmake_minimum_required(VERSION 2.8)

project(Beta)

add_executable(beta beta.cpp)

target_link_libraries(beta alpha)

但是,我收到以下错误:

/usr/bin/ld: cannot find -lalpha

如果我使用这条线,也会发生同样的事情:

target_link_libraries(beta libalpha.a)

为什么beta 找不到alpha 库?

【问题讨论】:

  • 您可能需要添加link_directories(the_directory_where_you_put_the_library)
  • 但是库已经复制到beta.cpp的同一目录下...
  • 你试过target_link_libraries(beta ./libalpha.a)吗?
  • 是的,这给了我错误:/usr/bin/ld: cannot find -l./libalpha.a
  • 可以加一行:link_directories(${Beta_SOURCE_DIR})?

标签: c++ cmake ld


【解决方案1】:

如果你想完全分开构建库和程序,你必须使用imported targets。当您尝试将可执行文件链接到“完全未知”的库时,CMake 构建系统会自动将定位库的任务传递给链接器,只需添加 -lalpha 选项。当链接器遇到该选项时,它会尝试将 libalpha.so 定位到标准库位置之一(即/usr/lib//usr/local/lib 等)并且预期会失败。您可以使用libalpha.a 的绝对路径:target_link_libraries(beta /path/to/libalpha.a)

但是,如果您可以一起构建东西,这将大大简化任务。考虑

/CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

Project(Test)

add_subdirectory(alpha)
add_subdirectory(beta)

/alpha/CMakeLists.txt

cmake_minimum_required(VERSION 2.8.11)

project(alpha)

set(SOURCES alpha.c)

add_library(alpha ${SOURCES})
target_include_directories(
  alpha INTERFACE
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
)

target_include_directories() 需要在其中包含复杂的表达式才能自动将 libalpha 包含目录添加到所有组件,这些组件随后将链接到 libalpha。

/beta/CMakeLists.txt

project(beta)

set(SOURCES beta.c)

add_executable(beta ${SOURCES})
target_link_libraries(beta alpha)

【讨论】:

    【解决方案2】:

    将此行添加到 alpha-library 的路径。

    link_directories( <library path> )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2013-10-03
      • 2014-10-30
      相关资源
      最近更新 更多