1

番号のないバージョンのライブラリに対してリンクするようにCMakeに指示するにはどうすればよいですか?たとえば、Boostライブラリを使用する場合、次のようになります。

find_package(Boost COMPONENTS regex program_options REQUIRED)
target_link_libraries(main ${Boost_PROGRAM_OPTIONS_LIBRARY})

およびlibboost_program_options.so.1.49.0に対する実行可能リンク。この実行可能ファイルを古いマシンで実行しようとすると、そのライブラリが見つからないため失敗しますが、この機能はそのライブラリバージョンにすでに存在していることがわかっています。

4

1 に答える 1

0

それはうまくいきません。機能はありますが、正確なAPIがない場合があります。そのため、UNIXリンクシステムはシンボリックリンクを使用するため、リンカは番号のないシンボリックリンクにアクセスし、依存関係のリストを書き出すときにそれを逆参照して、実行時に同じメジャーバージョンを要求します。

3つの選択肢があります。

  1. 古いブーストを使用して、ターゲットマシンで再コンパイルします。
  2. 実行可能ファイルと一緒に必要なブーストライブラリを配布します。これには、実行前にLD_LIBRARY_PATHを設定する起動スクリプトを作成することが含まれる可能性があります。
  3. 静的ブーストライブラリに対してリンクして、実行時の依存関係を排除します。find_packageの前に次の行を使用します。

SET(Boost_USE_STATIC_LIBS ON)

于 2012-06-05T14:51:36.273 に答える