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

时间:2017-05-16 19:27:04

标签: c++ c c++11 svm svmlight

我必须在我的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编译器) 提前致谢

2 个答案:

答案 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;应该记录这个库接口。