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-source が含まれており、依存関係は次の場所にあります。 lib フォルダー。

これを行うことはまったく可能ですか?フローツールに代わるものはありますか?

4

2 に答える 2

1

それは API を提供するライブラリであると主張しているので、それ可能であり、意図されていることさえあると思います。

使用する場合は、ライブラリをビルドしてアプリにリンクし、ドキュメント (そのライブラリを使用する付属のコマンドライン ツールのソースを含む) を使用して API の使用方法を理解する必要があります。


OK、私の現在の理解では、ヘッダーとライブラリがシステムにインストールされており、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 を使用する必要があります)。

ビルド システムを構成する方法のより具体的な詳細については、そのドキュメントを参照するか、別の質問をして、それが何であるかを実際に説明してください。

于 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 に答える