如何在C ++程序中包含流程工具?

时间:2012-02-08 15:57:44

标签: c++ c linux include netflow

在我们的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文件夹中。

是否可以做到这一点,以及如何做到这一点?可能有流量工具的替代方案吗?

2 个答案:

答案 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();
}