如何在C++代码中使用 SVM Light?(可能无需从C++代码调用可执行文件)
How is it possible use SVM Light inside the C++ code? (Possibly without invoking the executable from C++ code)
我必须在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 编译为共享对象库的功能,使外部代码能够轻松访问学习和分类功能。 应记录此库接口。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- 在c代码之间共享数据的最佳方式
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值