2012-02-08 33 views
0

C++プログラムでは、NetFlowデータを処理したいと考えています。これを実行する唯一のツールはflow-toolsで、コマンドラインから完全に実行されています(Linux)。C++プログラムにフローツールを含めるにはどうすればいいですか?

flow-toolsはcで書かれているので、C++プログラムでライブラリとして使用することは可能かもしれませんが、これを行う方法はわかりません。

フローツールのgzipはftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gzで、ファイルのc-sourceが含まれており、依存関係はlib-folderにあります。

これはすべて可能なのですか?フローツールに代わるものがありますか?

答えて

1

APIを提供するライブラリであると主張していますので、であり、意図しています。

これを使用するには、ライブラリを作成してアプリにリンクし、そのライブラリを使用するコマンドラインツールのソースを含むドキュメントを使用して、 APIを使用してください。


OK、そう、私の現在の理解は、ヘッダとライブラリがシステムにインストールされていることである、とあなたは、Debianのパッケージ管理を使用しています。

まず、あなたがあなたのビルドシステムを伝えることができるので、どこにそれらを見つけるために、ライブラリやヘッダファイルがどこにあるか知っている必要があります:それはあなたのディレクトリを与える必要があります

$ dpkg-query -L flow-tools 

てみたのフローツールヘッダlibsがインストールされています。

ので、次のステップは、ビルドシステムにそれらのヘッダとライブラリが利用できるようにすることです:彼らは/usr/libまたは/usr/local/lib/usr/includeまたは/usr/local/includeにしている場合は、パスをスキップすることができます。あなたはmakeで構築している場合たとえば、あなたは(ZR として。が言った)今、何か

CXXFLAGS += -lft 

あなたにも、特定のライブラリを追加する必要があります

FLOW_TOOLS_INC = <directory containing .h files> 
FLOW_TOOLS_LIB = <directory containing .a file(s)> 
CXXFLAGS += -I$(FLOW_TOOLS_INC) -L$(FLOW_TOOLS_LIB) 

などを追加することができます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

+0

あなたはそれを言及しなかった、あなたはソースを含むタールボールを説明した!はい、パッケージをインストールした場合、libや関連するコマンドラインツール(およびドキュメント)はおそらくすでに入手可能です。だから、どうしたの? – Useless

+0

これを含めてどうすればいいですか? zrによって述べられた方法に従う。コンパイルしようとすると "No such file or directory"というエラーがスローされます。ドライブ全体をヘッダファイルで検索すると結果は得られませんので、インストールされたパッケージが何であるか正確にはわかりませんが、コマンドラインからは動作しますが、ドキュメントもそこにあります。私は現在、ヘッダファイルを提供するかどうかを確認するためにtarballをインストールしようとしています。 – andersem

1

C++コードでCライブラリを使用するオプションがあるかもしれないと述べました。これは、C++ライブラリを使用して非常に同様に行われている、唯一の違いは、あなたが「のextern 『C』」であなたの宣言をラップすることです:

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

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

はい、私はこれを見ましたので、少し質問を絞っておくべきだったと思います。ファイルをビルドする必要がありますか、ヘッダーファイルとそのソースファイルをプロジェクトディレクトリの下のフォルダに置くことはできますか? – andersem

+0

ライブラリにリンクするには_how_を要求しているか、見た目にインストールしたパッケージを管理するには_how_か何か? – Useless

+1

flow-tools-devをインストールすると、あらかじめ構築されたすべてのライブラリ(* .a)ファイルがシステムにインストールされます。 –

関連する問題