我有以下设置:
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
而不重命名它们?
答案 0 :(得分:3)
extern "C" void sol()
{
cout<<"HW!!\n";
}
答案 1 :(得分:1)
您必须使用extern "C"
声明使sol
可用于C.将此放入公共标题中:
extern "C" void sol();