如果c ++函数需要其他库,如何编译“c ++函数”?

时间:2014-05-15 10:53:43

标签: c++ c

我将这些文件放在同一个文件夹中:

function.h
function.cpp
main.c中

如果我有一个像sum(int a){return a+a;}这样的简单函数(在function.cpp中),我可以编译它,但我需要使用这样的库:

#include "something.hh"
void function(){
   ClassX* test;
   ...
}

问题是,当我试图编译它时,我会得到"未定义的引用"在每个班级。

我该怎么编译呢? 这可能吗?我在某处读过你可以在c中使用c ++函数,而其返回类型及其参数可从C中访问。还有其他要求吗?

我的所作所为:

g++ -c -I /folder/include  function.cpp -o function.o
gcc -c main.c -o main.o
gcc main.o function.o -o exec

In function.cpp undefined reference to ClassX

2 个答案:

答案 0 :(得分:0)

我认为你的问题不是使用C和C ++,而是包含整个ClassX的文件没有被编译,因此在链接时的第三阶段它会给出错误

gcc main.o function.o -o exec

确保在一个.o文件中定义ClassX,并在上面的步骤中传递该文件。

现在回答你的问题, 你不能编译C ++代码是C编译器,因为C不向前兼容,但C ++向后兼容C,也就是说大多数C代码将由C ++编译器编译而几乎没有变化。但是你可以用c编写一个库或者将c代码编译成.o然后在C ++编译器中使用它来做你需要使用extern“C”链接。

extern "C"
{
....
}

选中此link

由于

答案 1 :(得分:0)

  

我该怎么编译呢?这可能吗?

通常,有两种可能性:

  1. 仅根据函数定义头文件API,使用extern "C"链接声明这些函数并在C代码中使用它们。

  2. 如果您有类声明或其他C ++特定代码,请将您的客户端代码编译为C ++(即将main.c移动到main.cpp)。

  3. 在您的情况下,您尝试使用C代码访问C ++类。 这是不可能的。

    您仍然可以使用该功能,但您必须创建一个适配层(API声明为extern" C"并且不声明类,模板或其他C ++功能)。

    在此适配层中,类或其他C ++构造可以隐藏在对客户端代码不透明的结构中。