我必须在我的C ++代码中使用SVM Light工具。我编译并将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对象代码(可执行文件)....是这样的吗?)
(我在Linux上使用C ++ 11编译器) 提前致谢
答案 0 :(得分:1)
我找到了自己可能的解决方案。我在这里发帖给任何人都感兴趣。我修改了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函数的名称。我修改了makefile,因此为svm_mylearn.c创建了目标代码(.o) 稍后命名我的.cpp文件Test.cpp我必须这样做:
extern "C"
{
# include "svm_common.h"
# include "svm_learn.h"
# include "svm_mylearn.h"
}
此外,我忘了在Test.cpp中我必须添加这样的extern声明:
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 );
以这种方式调用svm_my_exec函数(例如):
<div class="hero">
<div class="container d-flex align-items-center h-100">
<div class="row">
<div class="col-xs">
<h2>a real tag line here</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce iaculis dapibus enim, ut pharetra magna venenatis non. Maecenas aliquam.</p>
<a class="tek-btn" href="#">Order now!</a>
</div>
</div>
</div>
</div>
答案 1 :(得分:0)
此链接http://svmlight.joachims.org/在扩展和添加下的页面底部附近有一个DLL接口。我从那里开始。
更好的是,根据版本历史,在V6.01 - V6.02下,第二句说&#34;更新了makefile,增加了将SVM-light编译成共享对象库的能力,使外部代码易于访问学习和分类功能。&#34;应该记录这个库接口。