0

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

flow-tools 是用 c 编写的,因此我们认为可以将它用作 c++ 程序中的库,但我们不知道如何做到这一点。

flow-tools 的 gzip文件ftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gz包含文件的 c 源代码,依赖项位于lib 文件夹。

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

4

2 回答 2

1

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

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


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

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

$ dpkg-query -L flow-tools

它应该为您提供安装流工具头文件和库的目录。

因此,下一步是使这些头文件和库可用于您的构建系统:如果它们位于/usr/libor/usr/local/lib/usr/includeor/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)。

有关如何配置构建系统的更具体细节,请参阅文档,或问另一个问题并实际说出它是什么。

于 2012-02-08T16:02:27.343 回答
1

您提到您可以选择在您的 C++ 代码中使用 C 库。它的完成方式与使用 C++ 库非常相似,唯一的区别是您使用 'extern "C" ' 包装声明:

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

int main() {
 c_func1();
}
于 2012-02-08T16:03:19.913 回答