如何在c ++中使用Fresnel积分C库?

问题描述

我在我的c ++应用程序中包括一个菲涅耳积分库(http://www.mymathlib.com/functions/fresnel_sin_cos_integrals.html)。

假设我有以下c ++代码(main.cpp):

#include "include/Fresnel/fresnel_sine_integral.c"

using namespace std;

int main()
{
    return 0;
}  

但是当我这样编译程序时:

g++ main.cpp

我收到以下错误

In function `xFresnel_Sine_Integral(long double)':
main.cpp:(.text+0x66): undefined reference to `xFresnel_Auxiliary_Cosine_Integral(long double)'
main.cpp:(.text+0x8d): undefined reference to `xFresnel_Auxiliary_Sine_Integral(long double)'
collect2: error: ld returned 1 exit status

我是否必须以另一种方式将库链接到我的c ++应用程序中?还是我必须以其他方式进行编译?

解决方法

我认为您需要根据所引用的C源文件构建一个库。它们还不够完善。

我建议结构化您的构建以编译.c源文件以及您自己的应用程序源,并将整个链接链接到一个可执行文件中。您需要从每个.c文件中提取函数声明,并将它们放入.h标头中。您会在自己的源代码中#include中使用该标头,并且可能在.c文件中使用该标头,除非您希望每次编译时都显示全屏的编译器警告。

您需要确定是将.c文件编译为普通C,还是重命名它们并将其编译为C ++。您可能需要修改它们,C ++编译器才能毫无疑问地对其进行编译。如果将它们保留为C,则需要安排将这些文件编译为C,并将自己的文件编译为C ++。因此,您制作的标头必须与C和C ++兼容-为此,有一些标准技术可供我建议(但是SO上可能已经有一些东西)。

如果这是我要解决的问题,我会考虑将所有.c文件合并到一个文件中,并将其摆弄成优质的C ++(可能并不困难)。我将从C源代码的声明中创建一个单个标头,适合包含在C ++源代码中(因为现在全部为C ++)。但是,我不确定原始文件是否以允许这种方式的方式获得许可-我想您需要与作者联系。