Как включить инструменты потока в программу на C++?

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

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

В файле gzip для flow-tools, ftp://ftp.eng.oar.net/pub/flow-tools/flow-tools-0.66.tar.gz, содержится c-источник файлов, а зависимости находятся в Lib-папка.

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

2 ответа

Решение

Он претендует на то, чтобы быть библиотекой, предоставляющей 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

Теперь (как сказал зр.) Вам нужно внести объявление 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 должен получить это, или просто использовать тарбол, который вы связали).

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

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

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

int main() {
 c_func1();
}
Другие вопросы по тегам