5

私は多くの関連トピック ( 123など) を読みましたが、自分で答えを見つけられなかったので、ここにいます。

ビルドして実行可能な CMake プロジェクトがあります。「x」としましょう。「b.so」という他の共有ライブラリに依存する「a.so」という名前の共有ライブラリを作成しました。「x」に「a」を使いたい。

これが私の簡略化された「x」CMakelists.txtです:

SET(ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})

LINK_DIRECTORIES(${ROOT_DIR}/lib/a/bin/) # contains liba.so

INCLUDE_DIRECTORIES(${ROOT_DIR}/lib/a/include/) # contains "a" headers

ADD_EXECUTABLE(x ${SOURCE})

TARGET_LINK_LIBRARIES(x a)

「x」コンパイル出力の抜粋:

Linking CXX executable ../bin/x
/usr/bin/cmake -E cmake_link_script CMakeFiles/x.dir/link.txt --verbose=1
/usr/lib64/ccache/c++   -std=c++0x    CMakeFiles/x.dir/src/main /Main.cpp.o 
 ... -L/.../lib/a/bin -rdynamic  -la  -Wl,-rpath,/.../lib/a/bin 

「a」と「b」はコンパイルします。

問題は、x をコンパイルしたいときに、リンク時にエラーが発生することです: undefined reference to 'function name'. 「b」にもリンクしようとしましたが、まだ機能していません

ここで「b」も表示されますが、同じエラーが発生します...

Linking CXX executable ../bin/x
/usr/bin/cmake -E cmake_link_script CMakeFiles/x.dir/link.txt --verbose=1 
/usr/lib64/ccache/c++   -std=c++0x    CMakeFiles/x.dir/src/main 
/Main.cpp.o -o ../bin/x  -L/.../lib/b/bin -L/.../lib/a/bin 
-rdynamic -lb -la -Wl,-rpath,/.../lib/b/bin:/.../lib/a/bin 

エラー出力は次のとおりです。

 $ make
 [ 20%] Automatic moc for target x
 Linking CXX executable ../bin/x
 /.../lib/b/bin/b.so: undefined reference to `snd_pcm_sw_params_set_start_threshold'
 /.../lib/b/bin/b.so: undefined reference to `snd_seq_delete_simple_port'
 /.../lib/b/bin/b.so: undefined reference to `snd_pcm_info_set_device'
 /.../lib/b/bin/b.so: undefined reference to `snd_pcm_sw_params'
 /.../lib/b/bin/b.so: undefined reference to `snd_pcm_sw_params_set_silence_threshold'
 /.../lib/b/bin/b.so: undefined reference to `snd_pcm_hw_params_any'
 /.../lib/b/bin/b.so: undefined reference to `snd_seq_drain_output'
 /.../lib/b/bin/b.so: undefined reference to `snd_ctl_pcm_next_device'

 ...

 collect2: error: ld returned 1 exit status
 CMakeFiles/x.dir/build.make:163: recipe for target '../bin/x' failed
 make[2]: *** [../bin/x] Error 1
 CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/x.dir/all' failed
 make[1]: *** [CMakeFiles/x.dir/all] Error 2
 Makefile:76: recipe for target 'all' failed
 make: *** [all] Error 2

何が問題なのかわかりません。動作させるために多くのことを試みたので、今は混乱しています...しかし、何も機能しませんでした。

何か案が?

ありがとう!

4

2 に答える 2

1

「b」には特定の依存ライブラリがありませんでした。FIND_PACKAGE「b」CMakeLists.txtのCMakeディレクティブを介して追加しました。それは問題を解決しました。

したがって、上記の "x" CMakeLists.txt は正しいです。

于 2015-03-24T18:08:13.860 に答える