2012-02-08 46 views
0

在我们的C++程序中,我们想要处理NetFlow数据。我们发现的唯一工具是flow-tools,我们已经安装并且可以从命令行(Linux)完美运行。如何在C++程序中包含流程工具?

流程工具是用c语言编写的,因此我们认为可以在C++程序中使用它作为库,但我们不知道如何做到这一点。

流程工具的gzip文件ftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gz包含文件的c源文件,依赖文件位于lib文件夹中。

是否可以做到这一点,以及如何?可能会有流动工具的替代品吗?

回答

1

它声称是提供API的库,所以我期望它可能的,甚至是有意的。

如果您想使用它,您需要构建库,将其链接到您的应用程序,并使用文档(包括使用该库的包含命令行工具的源代码)来弄清楚如何使用API​​。


好的,所以我目前的理解是头和库已经安装在您的系统上,并且您正在使用Debian软件包管理。

首先,你需要知道在哪里库和头文件,所以你可以告诉你的构建系统从哪里找到它们:尽量

$ dpkg-query -L flow-tools 

它应该给你的目录,其中流动的工具头和libs被安装。

所以,下一步是提供这些头文件和库来构建系统:如果他们在/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)。

有关如何配置构建系统的更多具体细节,请参阅文档,或者询问其他问题并实际说出它的含义。

+0

但它使用sudo已经安装在我的机器上的apt-get安装流程的工具,它不应该可用吗? – andersem 2012-02-08 16:10:21

+0

你没有提到,你描述了一个包含源代码的压缩包!是的,如果你安装了这个软件包,lib和相关的命令行工具(和文档)已经可用了。那么,问题是什么? – Useless 2012-02-08 16:32:21

+0

我将如何去解决这个问题?按照zr提到的方法。导致“没有这样的文件或目录” - 尝试编译时抛出错误。搜索整个驱动​​器的头文件没有结果,所以我不知道我安装的软件包包含什么,除了它可以从命令行运行,是的,文档也在那里。我目前正在尝试安装tarball以查看它是否会为我提供头文件。 – andersem 2012-02-08 16:40:51

1

你提到你可能有一个在C++代码中使用C库的选项。这是非常类似的做用C++库,唯一的区别是你包你的宣言与“外部‘C’”:

extern "C" { 
    #include "c-lib-header.h" 
} 

int main() { 
c_func1(); 
} 
+0

是的,我见过这个,所以我想我应该缩小我的问题一点。我是否需要构建文件,或者可以将头文件和它的源文件放在我的项目目录下的文件夹中? – andersem 2012-02-08 16:13:58

+0

您是否问_how_链接库,或_how_来管理您明显安装的软件包,或者什么? – Useless 2012-02-08 16:34:17

+1

如果你安装了flow-tools-dev,你将会在系统上安装所有的预建库(* .a)文件,那么你所需要做的就是链接它们。 – 2012-02-08 16:47:58