Как включить инструменты потока в программу на 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();
}