こんにちは基本的に私はhereからsvmを使用しようとしています。これは、Cで書かれており、C++でそれを使用する方法を説明しますされています
CコードとしてCMAKEリンク外部Cライブラリ
- コンパイル "svm_learn.c"、 "svm_common.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が発生します。 私はこれらの.hファイルが.oファイルのフロントエンドであることをcmakeに伝えなければならないと思っています。しかしどうですか?
感謝 –