如何在C++代码中使用 SVM Light?(可能无需从C++代码调用可执行文件)

How is it possible use SVM Light inside the C++ code? (Possibly without invoking the executable from C++ code)

本文关键字:C++ 代码 调用 可执行文件 Light SVM      更新时间:2023-10-16

我必须在C++代码中使用SVM Light工具。我像 http://svmlight.joachims.org/一样编译 SVM Light 并将其链接到我的代码,但现在我该如何调用

./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 对象代码(可执行文件(。是这样的吗?

(我在 Linux 上使用 C++11 编译器(提前致谢

我从自己身上找到了一个可能的解决方案。我在这里发布给任何感兴趣的人。我修改了svm_learn_main.c,我在这里留下了一个空的主。我添加了一个新文件 svm_mylearn.c 和 svm_mylearn.h .我在 svm_mylearn.c 中复制了原始 svm_learn_main.c。 我在 extern 声明中添加了标头 svm_mylearn.h。我在 svm_mylearn.h 中移动了函数的签名。我用与 main 相同的代码更改了 svm_my_exec(int,char* []( 中 main 函数的名称。我修改了生成文件,因此为 svm_mylearn.c 创建目标代码(.o(稍后将我的.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

此外,我忘记了在测试中.cpp我必须添加这样的 extern 声明:

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 );

此链接 http://svmlight.joachims.org/在页面底部附近的"扩展和添加"下有一个 DLL 接口。 我会从那里开始。

更好的是,在版本历史记录下,在 V6.01 - V6.02 下,第二句话说"更新了 makefile,以添加将 SVM-light 编译为共享对象库的功能,使外部代码能够轻松访问学习和分类功能。 应记录此库接口。