【问题标题】:C Code linking to C++ in CLion not working在 CLion 中链接到 C++ 的 C 代码不起作用
【发布时间】: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 完成。还是不可能?

标签: c++ c 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文件,你可以只指定当前目录。

【讨论】:

    猜你喜欢
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2021-12-25
    • 2016-10-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多