Привет в основном я пытаюсь использовать SVM от здесь . Он написан на C и дает инструкции, как использовать его на C ++:
- Скомпилируйте "svm_learn.c", "svm_common.c" и "svm_hideo.c" как
С-код.
Программа на C ++, которую вы хотите вызвать svm_learn / 8 и classify_example / 2
(или classify_example_linear / 2) из
необходимо включить следующее
заголовки:
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
)
Так что теперь мне просто нужно включить упомянутые .h файлы. Я добавил их в другие мои исходные файлы в:
ADD_EXECUTABLE ( MYProgramm
...
#other source files
...
src/svm_common.h
src/svm_learn.h
)
К сожалению, это не работает. Вызов любой функции из этих файлов .h приводит к ошибке компоновщика LNK2001, LNK1120.
Я предполагаю, что должен сказать cmake, что эти файлы .h являются интерфейсом для файлов .o. Но как?