在我们的C ++程序中,我们想要处理NetFlow数据。我们发现的唯一工具是flow-tools,我们已经安装并从命令行(Linux)完美运行。
flow-tools是用c编写的,因此我们认为可以将它用作c ++程序中的库,但是我们不知道如何做到这一点。
流工具的gzip ftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gz包含文件的c源,依赖项位于lib文件夹中。
是否可以做到这一点,以及如何做到这一点?可能有流量工具的替代方案吗?
答案 0 :(得分:1)
它声称是一个提供API的库,所以我希望 可能,甚至是有意的。
如果你想使用它,你需要构建库,将它链接到你的应用程序,并使用文档(包括使用该库的所包含的命令行工具的来源)来弄清楚如何使用API。
好的,所以我目前的理解是你的系统上安装了头文件和库,你正在使用Debian软件包管理。
首先,您需要知道库和头文件的位置,以便您可以告诉构建系统在哪里找到它们:尝试
$ dpkg-query -L flow-tools
它应该为您提供安装流工具头文件和库的目录。
因此,下一步是将这些标头和库提供给您的构建系统:如果它们位于/usr/lib
或/usr/local/lib
以及/usr/include
或/usr/local/include
,则可以跳过路径。例如,如果您使用make
进行构建,则可以添加类似
FLOW_TOOLS_INC = <directory containing .h files>
FLOW_TOOLS_LIB = <directory containing .a file(s)>
CXXFLAGS += -I$(FLOW_TOOLS_INC) -L$(FLOW_TOOLS_LIB)
您还需要添加特定的库
CXXFLAGS += -lft
现在(正如 zr。所说)你需要将API声明带入你的源代码并开始写它,如下所示:
extern "C" { // it is a C library, and we're building C++ (right?)
#include <flow-tools.h> // or whatever the file name is
}
有关如何在构建库时使用库的更多具体细节,请参阅随其附带的命令行工具的文档和源代码(apt-get source flow-tools
应该得到这个,或者只是使用它你链接的tarball。)
有关如何配置构建系统的更多具体细节,请参阅其文档,或询问其他问题并实际说出它是什么。
答案 1 :(得分:1)
您提到您可以选择在C ++代码中使用C库。它与使用C ++库非常相似,唯一的区别是你用'extern“C”包裹你的声明:
extern "C" {
#include "c-lib-header.h"
}
int main() {
c_func1();
}