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