2017-01-13 5 views
2

libtest-lib.soというコンパイル済みの共有ライブラリファイルをリンクしようとしています。これは私が私のCMakeLists.txtの一番下に持っているものです。CMakeと共有ライブラリをリンクする

上記のように
link_directories("/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a") 

add_library(testlib libtest-lib.so) 

target_link_libraries(testlib libtest-lib.so) 

、私は次のエラーを取得する:

CMake Error at CMakeLists.txt:49 (add_library): 
    Cannot find source file: 
    libtest-lib.so 
    Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm  .hpp 
    .hxx .in .txx 
CMake Error: CMake can not determine linker language for target: testlib 

私はadd_library行をコメントアウトした場合、私は以下のようになります。

CMake Error at CMakeLists.txt:51 (target_link_libraries): 
Cannot specify link libraries for target "testlib" which is not built by this project. 

ライブラリにリンクするときは、ソースファイル(.c、cppなど)が絶対に必要になると思われます。しかし、どうやって.soファイルにリンクするのですか?ドキュメントでは、target_link_libraries()について次のように述べています。

名前は、add_executable()やadd_library()などのコマンドでカレントディレクトリに作成されている必要があります。

add_library()をadd_executable()に置き換えると、同じエラーが発生します。 CMakeで.soファイルをリンクする正しい方法は何ですか?

答えて

1

あなたが持っている必要があります。

link_directories("/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a") 
set(MY_SOURCES mylib.cpp) 
add_library(testlib ${MY_SOURCES}) 
target_link_libraries(testlib libtest-lib) 

あなたがadd_library()add_executable()なく、すでにコンパイルされたライブラリに2つ目の引数としてあなたのライブラリーのソースを指定する必要があることを意味します。
ソースが必要なのは、既存のライブラリにリンクする必要があるもの(ライブラリまたは実行可能ファイル)を作成するためです。
それ以外の場合は、何を作成しますか?何もない?そしてライブラリを何にリンクさせますか?その図書館の消費者は誰ですか?

+0

しかし、私はドンソースはありません。全体のポイントは、あらかじめコンパイルされた.soファイルをリンクすることです。 –

+1

?あなたはライブラリを何にリンクしたいのですか?何もない? – fedepad

0

add_libraryは新しいライブラリを作成します。

代わりに、ライブラリを他のターゲットにリンクする必要があります。

はのは、これはすでに動作するはず

add_executable(main main.cpp) 
target_link_library(main libtest-lib) 

を言ってみましょう。

4

私が何をしたいことはCMakeのためにライブラリをインポートすることであると思う:

add_library(testlib SHARED IMPORTED) 
set_property(TARGET testlib PROPERTY IMPORTED_LOCATION "/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libtest-lib.so") 

https://cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets詳しく

+1

質問のタイトルは完全に誤解を招く... – fedepad

-3

これを行うための適切な方法のためには、次のとおりです。

target_link_libraries(native-lib "/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/${ANDROID_ABI}/libtest-lib.so") 
+5

それはdefinitetly適切な方法ではないです。ダイレクト・パスを入力することはありませんが、ライブラリを見つけてその結果を変数に格納し、その変数をtarget_link_librariesに渡します。 – usr1234567

+0

もちろん、それを変数に入れる方が良いでしょう。要点は、上記の*動作*ですが、それ以外の回答はありませんでした。あなたは、本質的ではない細部に固執しています。 –

関連する問題