Как включить инструменты потока в программу на C ++? - PullRequest
0 голосов
/ 08 февраля 2012

В нашей программе на C ++ мы хотим обрабатывать данные NetFlow. Единственный инструмент для этого, который мы нашли, это flow-tools , который мы установили и который отлично работает из командной строки (Linux).

flow-tools написан на c, поэтому мы подумали, что возможно использовать его как библиотеку в программе на c ++, но мы не знаем, как это сделать.

GZIP для инструментов потока, ftp: //ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gz, включает в себя c-источник файлы и зависимости находятся в папке lib.

Можно ли вообще это сделать и как? Может ли быть альтернатива Flow-Tools?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Вы упомянули, что можете использовать библиотеку C в своем коде C ++. Это делается очень похоже на использование библиотеки C ++, с той лишь разницей, что вы заключаете объявление в 'extern "C"':

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

int main() {
 c_func1();
}
1 голос
/ 08 февраля 2012

Она претендует на то, чтобы быть библиотекой, предоставляющей API, поэтому я ожидаю, что возможно и даже предназначено.

Если вы хотите использовать ее, вам нужно будет создатьбиблиотеки, свяжите ее с вашим приложением и используйте документацию (включая источник включенных инструментов командной строки, которые используют эту библиотеку), чтобы выяснить, как использовать API.


ОК, так что мой текущийпонимание состоит в том, что заголовки и библиотеки установлены в вашей системе, и вы используете управление пакетами 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 должен получить это, или просто используйте связанный вами тарбол).

Для более подробной информации окак настроить систему сборки, см. ее документацию или задайте другой вопрос и на самом деле скажите, что это такое.

...