链接C和C ++对象文件

时间:2014-02-20 15:59:59

标签: c++ c linker ld object-files

我有以下设置:

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而不重命名它们?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您必须使用extern "C"声明使sol可用于C.将此放入公共标题中:

extern "C" void sol();