CMake で「link_directories」を使用したライブラリの検索が困難になる
CMake の「link_directories」を使用して共有ライブラリ libprotobuf.so をリンクしようとするとコマンドを実行すると、ユーザーは、関数への未定義の参照を示すリンカー エラーが発生します。 図書館。指定されたディレクトリにライブラリが存在するにもかかわらず、CMake はライブラリを見つけることができません。
解決策
この問題は、CMake コマンドがディレクトリ内に配置される順序に起因します。 CMakeLists.txt ファイル。 「link_directories」コマンドは、「target_link_libraries」コマンドの前ではなく、「add_executable」コマンドの前に呼び出す必要があります。
説明
「add_executable」は実行可能ターゲットを作成し、「link_directories」は実行可能ターゲットを作成します。ディレクトリで共有ライブラリを検索する必要があります。 「add_executable」コマンドの後に「link_directories」コマンドを配置すると、CMake は実行可能ファイルをリンクしようとしたときにライブラリを見つけることができません。
Modified CMakeLists.txt
link_directories(/usr/lib/x86_64-linux-gnu) add_executable(test main.cpp) target_link_libraries(test protobuf)
コマンドの順序が修正されると、CMake は正常に libprotobuf.so ライブラリを見つけます。また、リンカは未定義の参照エラーを生成しなくなりました。
以上が「link_directories」を使用すると CMake が共有ライブラリを見つけられないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。