在 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 */
 

ma​​in.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.cgcc -shared -o libCfile.so cFile.oc++ -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 代码不起作用的主要内容,如果未能解决你的问题,请参考以下文章

clion C++读取中文路径问题

进程以退出代码 -1073741819 (0xC0000005) C++ clion 完成

如何在 CLion 中启用 C++11?

CLion 无法将项目识别为 C++14

C++ opencv配置 Vs2019和Clion

C++ opencv配置 Vs2019和Clion