如何在C++程序中包含流程工具?
在我们的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文件夹中。
是否可以做到这一点,以及如何?可能会有流动工具的替代品吗?
它声称是提供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)。
有关如何配置构建系统的更多具体细节,请参阅其文档,或者询问其他问题并实际说出它的含义。
你提到你可能有一个在C++代码中使用C库的选项。这是非常类似的做用C++库,唯一的区别是你包你的宣言与“外部‘C’”:
extern "C" {
#include "c-lib-header.h"
}
int main() {
c_func1();
}
但它使用sudo已经安装在我的机器上的apt-get安装流程的工具,它不应该可用吗? – andersem 2012-02-08 16:10:21
你没有提到,你描述了一个包含源代码的压缩包!是的,如果你安装了这个软件包,lib和相关的命令行工具(和文档)已经可用了。那么,问题是什么? – Useless 2012-02-08 16:32:21
我将如何去解决这个问题?按照zr提到的方法。导致“没有这样的文件或目录” - 尝试编译时抛出错误。搜索整个驱动器的头文件没有结果,所以我不知道我安装的软件包包含什么,除了它可以从命令行运行,是的,文档也在那里。我目前正在尝试安装tarball以查看它是否会为我提供头文件。 – andersem 2012-02-08 16:40:51