在 CLion 中链接到 C++ 的 C 代码不起作用
Posted
技术标签:
【中文标题】在 CLion 中链接到 C++ 的 C 代码不起作用【英文标题】:C Code linking to C++ in CLion not working 【发布时间】:2017-02-16 18:52:13 【问题描述】:我知道有大量的帖子,但是浏览了很多帖子,我发现没有任何效果。
我想在我的 C++ 文件中包含一些 .h 和 .c 文件。
单击 CLion 中的方法会将我重定向到该 foo.h 文件,但最终它无法处理以下消息:
架构 x86_64 的未定义符号: “_fooFct”,引用自: _main 在 main.cpp.o ld:未找到架构 x86_64 的符号
foo.h
void fooFct();
foo.c
void fooFct()
/* do some stuff here */
main.cpp
#include <iostream>
extern "C"
#include "clibraryFolder/header/foo.h"
int main()
fooFct();
return 0;
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(newcsample)
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
set(SOURCE_FILES main.cpp)
add_executable(newcsample $SOURCE_FILES)
但我不想在 CMakeFiles.txt 中包含 C 文件。除了编辑 CMakeFiles 之外,还有其他方法吗?
【问题讨论】:
您的CMakeLists.txt
文件是什么样的?它是否在源列表中列出了foo.c
?
您正在声明 fooFct() 函数,但您没有在其定义中链接:后者应该在为 foo.c 创建的目标文件中,您是否也在链接它?
你的意思是gcc -c Cfile.c
、gcc -shared -o libCfile.so cFile.o
、c++ -L/somehwere -Wall main.cpp -o main -lCfile
?不,我想完全由 CLion 完成。还是不可能?
【参考方案1】:
在您的 CMakeLists.txt
文件中进行以下更改
cmake_minimum_required(VERSION 3.6)
project(newcsample)
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
set(SOURCE_FILES main.cpp foo.c) #all .cpp files and .c files here
add_executable(newcsample $SOURCE_FILES)
如果是#include,如果有.h文件,你可以只指定当前目录。
【讨论】:
以上是关于在 CLion 中链接到 C++ 的 C 代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章