【发布时间】:2019-01-20 19:11:39
【问题描述】:
我正在尝试构建一个从 C++ 调用 C 代码的 CMake 项目,并且我得到未定义的符号,即使我(AFAIK)正确使用“extern C”。
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(CTest LANGUAGES CXX)
add_executable(test main.cpp lib.c)
main.cpp:
#include "lib.h"
int main()
{
printit();
return 0;
}
lib.c:
#include <stdio.h>
#include "lib.h"
int printit()
{
printf("Hello world\n");
return 0;
}
lib.h:
extern "C" int printit();
这给了我一个“未定义的 printit 引用”错误。
如果我只是从命令行构建它,它可以正常工作:
g++ main.cpp lib.c
我做错了什么?
【问题讨论】:
-
由于您同时拥有 C 和 CXX 源代码,因此您应该在 CMakeLists.txt 中使用
project(CTest LANGUAGES C CXX)。
标签: c++ cmake linker extern calling-convention