This question already has answers here:
Using C++ library in C code

(4个答案)


6年前关闭。




我有以下设置:

main.c:
extern void sol();
int main(){
    sol();
}

sol.cc:
#include<iostream>
using namespace std;
void sol(){
    cout<<"HW!!\n";
}

我编译为单独的目标文件:
$gcc main.c -c
$g++ sol.cc -c

但是当我尝试将它们链接到单个可执行文件时,
$g++ main.o sol.o

我得到:main.c:(.text+0x7): undefined reference to 'sol'nm sol.o表明存在00000000 T _Z3solv,而nm main.o需要U sol。我发现C++重命名函数是为了避免重载函数使用相同的名称。有什么办法告诉编译器sol.o包含重命名的函数,或者在不重命名它们的情况下编译sol.cc

最佳答案

extern "C" void sol()
{
    cout<<"HW!!\n";
}

关于c++ - 链接C和C++目标文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21913049/

10-10 16:36