ホームページ >バックエンド開発 >C++ >「link_directories」を使用すると CMake が共有ライブラリを見つけられないのはなぜですか?

「link_directories」を使用すると CMake が共有ライブラリを見つけられないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-16 09:32:14272ブラウズ

Why Does CMake Fail to Find My Shared Library When Using `link_directories`?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。