找不到具有简单C++示例的库
Cannot find library with simple C++ example
我正在使用cmake在Ubuntu中构建一个名为alpha
的C++库,其中包含一个源文件:
cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_library (alpha alpha.cpp)
这将创建一个名为 libalpha.a
的文件,我现在想要链接到该文件。因此,我将其复制到另一个投影C++的源目录中,称为 beta
,其中还包含一个源文件:
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
库?
如果您希望完全分开构建库和程序,则必须使用导入的目标。当您尝试将可执行文件链接到"完全未知"的库时,CMake 生成系统会自动将查找库的任务传递给链接器,只需添加-lalpha
选项即可。当链接器遇到该选项时,它会 libalpha.so 尝试在标准库位置之一(即 /usr/lib/
,/usr/local/lib
等),并且预期失败。您可以使用 libalpha.a
的绝对路径:target_link_libraries(beta /path/to/libalpha.a)
。
但是,如果你们可以一起构建东西,这将大大简化任务。考虑
cmake_minimum_required(VERSION 2.8)
Project(Test)
add_subdirectory(alpha)
add_subdirectory(beta)
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。
project(beta)
set(SOURCES beta.c)
add_executable(beta ${SOURCES})
target_link_libraries(beta alpha)
将此行与 alpha 库的路径添加。
link_directories( <library path> )
相关文章:
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法