问题描述
我在我的c ++应用程序中包括了一个菲涅耳积分库(http://www.mymathlib.com/functions/fresnel_sin_cos_integrals.html)。
#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 ++)。但是,我不确定原始文件是否以允许这种方式的方式获得许可-我想您需要与作者联系。