c++ - 与 CMake 链接后的“未定义引用”
问题描述
我想构建一个基于 .cpp 和 .h 文件的简单应用程序。我无法使我的项目工作,所以我从一个基本示例开始,但没有成功,因为我刚刚开始在 Linux 中创建项目。从我所见,我的 CMakeLists 应该是这样的:
我的 CMakeLists.txt :
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project(test C CXX)
add_executable(${PROJECT_NAME} main_new.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR})
我的 main_new.cpp :
#include <read.h>
int main(int argc, char* argv[])
{
int a, b, c, d, e = 0;
std::cout << "hello im example " << std::endl;
read_int(&a, &b, &c, &d, &e);*
return 0;
}
我的 read.h :
#ifdef __cplusplus
extern "C" {
#endif
int read_int(int *vectorA, int *vectorB, int *matrixA, int *matrixB, int *flags);
#ifdef __cplusplus
}
#endif
我的 .cpp 和 .h 文件在同一个文件夹中。cmake .
没有给我错误,但使用后make
我得到了
main_new.cpp:(.text+0x68) : undefined reference to « read_int »
我正在使用由 cmake 命令创建的 makefile。我应该创建一个自定义的 makefile 吗?
编辑:添加的问题:我还必须实现 .so 文件,但是target_link_libraries(test ${CMAKE_SOURCE_DIR}/libA.so ${CMAKE_SOURCE_DIR}/libB.so)
在我的 CMakeLists.txt 文件中执行是行不通的。如何将这些库链接到我的可执行文件?
解决方案
推荐阅读
- java - 如何使用 Spring Data 从 Spring Boot 中的实体中选择几个字段?
- javascript - 根据现有的类名更改类名
- mysql - MySQL SELECT 存储过程的名称并用该名称调用它
- sql - 避免 datediff 中使用的列分组?
- r - 如何从 stargazer 包中获取表格?
- python - 拆分句子,处理单词并将句子重新组合在一起?
- python - 在 xampp 上运行 python 脚本
- c# - 将 XSD 架构内容添加到架构集时出错
- swift - 在 swift 5 枚举中使用 @unknown 默认值:如何抑制“默认值将永远不会被执行”警告?
- c++ - 堆栈在函数中弹出仍然显示在主函数中。对于给定的向量,调用是否应该通过引用