嗨基本上我想从这里使用svm .它是用C语言编写的,并给出了如何在c ++中使用它的说明:
- 将"svm_learn.c","svm_common.c"和"svm_hideo.c"编译为
C代码.要调用svm_learn/8和classify_example/2(或classify_example_linear/2)的C++程序需要包含以下标头:
extern"C"{#include"svm_common.h"#include"svm_learn.h"}
将"svm_learn.o","svm_common.o"和"svm_hideo.o"链接到您的程序.
所以我编译了提到的文件并获得了所需的.o文件.比我添加:
SET( svm_lib_light_obj
E:\framework\svm_light\build\svm_learn.o
E:\framework\svm_light\build\svm_common.o
E:\framework\svm_light\build\svm_hideo.o
)
ADD_LIBRARY(
svm_lib_light
STATIC
EXCLUDE_FROM_ALL
${svm_lib_light_obj}
)
SET_SOURCE_FILES_PROPERTIES(
${svm_lib_light_obj}
PROPERTIES
EXTERNAL_OBJECT true # to say that "this is actually an object file, so it should not be compiled, only linked"
GENERATED true # to say that "it is OK that the obj-files do not exist before build time"
)
SET_TARGET_PROPERTIES(
svm_lib_light
PROPERTIES
LINKER_LANGUAGE C # Or else we get an error message, because cmake can't figure out from the ".o"-suffix that it is a C-linker we need.
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib
)
Run Code Online (Sandbox Code Playgroud)
所以现在我只需要包含提到的.h文件.我将它们添加到我的其他源文件中:
ADD_EXECUTABLE ( MYProgramm
...
#other source files
...
src/svm_common.h
src/svm_learn.h
)
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用.从这些.h文件调用任何函数会导致链接器错误LNK2001,LNK1120.我猜我必须告诉cmake这些.h文件是.o文件的前端.但是怎么样?
最好的方法是将这些C文件添加到项目中:
SET(SVM_LIGHT_SRC_DIR "E:/framework/svm_light")
INCLUDE_DIRECTORIES(${SVM_LIGHT_SRC_DIR})
ADD_LIBRARY(
svm_lib_light
${SVM_LIGHT_SRC_DIR}/svm_learn.c
${SVM_LIGHT_SRC_DIR}/svm_common.c
${SVM_LIGHT_SRC_DIR}/svm_hideo.c
)
ADD_EXECUTABLE ( MYProgramm
...
#other source files
...
)
TARGET_LINK_LIBRARIES(MYProgram svm_lib_light)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5664 次 |
| 最近记录: |