0
嗨,基本上我试图从here使用svm。它是用C语言编写,并作出指示如何在C++中使用它:CMAKE链接外部c库
- 编译 “svm_learn.c”, “svm_common.c”,并作为
C代码 “svm_hideo.c”。要呼叫svm_learn/8和classify_example/2 (或classify_example_linear/2) 需要包括以下 头中的C++程序:
的extern “C”{ #包括“svm_common。 H” #包括 “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文件的前端。但是如何?
感谢,帮助 – 2011-01-24 21:28:20