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

How do I use a Fresnel integral C Library in 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

我是否必须 link 以另一种方式将该库添加到我的 C++ 应用程序中?还是我必须用其他方式编译?

我认为您需要从您引用的 C 源文件制作 一个库。它们还不够self-contained。

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

您需要决定是将 .c 文件编译为普通 C 文件,还是将它们重命名并编译为 C++。您可能必须修改它们,C++ 编译器才能毫无怨言地编译它们。如果将它们保留为 C,则需要安排将这些文件编译为 C,并将您自己的文件编译为 C++。因此,您制作的 header 需要同时与 C 和 C++ 兼容——这方面有标准技术,我可以就此提出建议(但可能已经有关于 SO 的内容)。

如果这是我要解决的问题,我会考虑将所有 .c 文件合并到一个文件中,并且 fiddle 它是好的 C++(可能不难)。我将从 C 源代码中的声明创建一个 header,适合包含在 C++ 源代码中(因为现在都是 C++)。但是,我不确定原始文件是否以允许这样做的方式获得许可 - 我想这是您需要与作者核实的内容。