Как можно использовать SVM Light внутри кода C ++? (Возможно, без вызова исполняемого файла из кода C ++)

Я должен использовать инструмент SVM Light в моем коде C ++. Я скомпилировал и связал SVM Light с моим кодом, как в http://svmlight.joachims.org/ но теперь как я могу позвонить

./svm_learn -v 0 -x 1  example1/train.dat example1/model

например из моего кода C ++ вместо этого из командной строки?
А именно в оригинальном коде с

./svm_learn -v 0 -x 1  example1/train.dat example1/model

Я получаю модель SVM. Как я могу теперь получить ту же модель из моего кода C ++? Предпочтительно вызывать функцию из моего кода C ++, а не вызывать исполняемый файл из командной строки? (Может быть, я вынужден использовать системные или аналогичные функции для вызова кода объекта C (исполняемого файла) из моего кода C ++ …. Это как?)

(Я использую компилятор C ++ 11, в Linux)
заранее спасибо

0

Решение

Я нашел возможное решение от себя. Я пост здесь, чтобы кто-то был заинтересован Я изменил svm_learn_main.c, я оставил здесь одну пустую главную. Я добавил новый файл svm_mylearn.c и svm_mylearn.h. Я скопировал оригинальный файл svm_learn_main.c в файл svm_mylearn.c. Я добавил сюда в объявлении extern заголовок svm_mylearn.h. Я перенес подпись функций в svm_mylearn.h. Я изменил имя основной функции в svm_my_exec (int, char * []) ​​с тем же кодом основного. Я изменил make-файл, поэтому создаю объектный код (.o) для svm_mylearn.c
Позже, назвав мой .cpp файл Test.cpp, я должен сделать:

make all
g++ -c Test.cpp
g++ Test.o svm_learn.o svm_common.o svm_hideo.o svm_mylearn.o    (linking)
./a.out

Более того, я забыл, что в Test.cpp мне нужно добавить внешнее объявление, например так:

extern "C"{
# include "svm_common.h"# include "svm_learn.h"# include "svm_mylearn.h"}

и вызвать функцию svm_my_exec следующим образом (например):

const char *comando[]={"./svm_learn" ,"-v", "1", "-x", "1", "-o",
"2.0", "-k" ,"100", "example1/train.dat", "example1/model"};
svm_my_exec(sizeof(comando)/sizeof(char *),comando );
1

Другие решения

Эта ссылка http://svmlight.joachims.org/ имеет интерфейс DLL в нижней части страницы в разделе «Расширения и дополнения». Я бы начал там.

Более того, в истории версий под V6.01 — V6.02 второе предложение гласит: «Обновлен make-файл, чтобы добавить возможность компиляции SVM-light в библиотеку совместно используемых объектов, которая предоставляет внешнему коду легкий доступ к функциям обучения и классификации». » Этот интерфейс библиотеки должен быть задокументирован.

0

По вопросам рекламы [email protected]