如果 c++ 函数需要其他库,如何编译"c++ functions from c"?

How do I compile "c++ functions from c" if c++ functions need other libraries?

本文关键字:c++ 编译 from functions 何编译 函数 其他 如果      更新时间:2023-10-16

我有这些文件在同一个文件夹:

function.h
function.cpp
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

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

gcc main.o function.o -o exec

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

现在回到你的问题,你不能用C编译器编译c++代码,因为C不向前兼容,但c++对C是向后兼容的,也就是说,大多数C代码都可以被c++编译器编译,几乎没有什么变化。但是你可以用c写一个库,或者将c代码编译成。o,然后在c++编译器中使用它,你需要使用extern " c "链接。
extern "C"
{
....
}

查看此链接

谢谢

我应该如何编译这个?这可能吗?

通常有两种可能:

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

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

在你的例子中,你试图在C代码中访问一个c++类。

你仍然可以使用这个功能,但是你必须创建一个适配层(api声明为extern "C"并且不声明类、模板或其他c++特性)。

在这个适配层中,类或其他c++结构可以隐藏在客户端代码不透明的结构中。