[解決済み] コナンでライブラリが見つからない
質問
コナンを理解するために、不思議な問題に遭遇したので、皆さんの助けや助言をお願いします。
まず最初に、エラーについて。
よく知られている:
/bin/ld: cannot find -lnlohmann_json_schema_validator
私がしようとしていること: nlohmann_json をベースにした json-schema-validator の主要なサンプルを、cmake と conan パッケージマネージャを使ってビルドしようとしています。
リンク集 :
CMakeLists.txt は非常にシンプルです。
cmake_minimum_required(VERSION 3.10)
project(app VERSION 1.0.0 LANGUAGES CXX)
add_executable(${PROJECT_NAME} src/main.cpp)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/master/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake")
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)
# Point 1
conan_cmake_run(REQUIRES json-schema-validator/2.1.0 BASIC_SETUP BUILD missing)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
# Point 2
target_include_directories(${PROJECT_NAME} PUBLIC "src")
ここから先は、いろいろな情報を検索して見つけたのですが.
-
https://stackoverflow.com/a/34256630/7135482
: リンク時に /bin/ld でライブラリが見つからないことは確認しましたが、私はすべて (Conan プロファイルや Cmake など) デフォルトの設定を使用しており、コンパイル時にライブラリを静的に使用したいので、なぜ /bin/ld が
/home/<user>/.conan/data/json-schema-validator/2.1.0/_/_/package/feb79143ef49afa1ac08f157e4ea835476439057/lib
... 私の見解では、conan側はかなり正確なようです... Makefileを構築するときに、なぜCMakeに正しいパスを与えないのでしょうか? -
CMakeLists.txt の変更("Point 1" と "Point 2" の間)、"unrecommanded" の使用かと思い、変更しました。
conan_cmake_run(...)
. に従って変更したわけです。 のドキュメントを参照してください。
conan_cmake_configure(REQUIRES json-schema-validator/2.1.0
GENERATORS cmake)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conan-center
SETTINGS ${settings})
(ここで、エラーが発生します
fatal error: nlohmann/json-schema.hpp: No such file or directory
. つまり、このやり方では、ファイルを#includeすることすらできないようです)
- nlohmann_json レポと json-schema-validation レポを vendor フォルダにクローンして、CMake システムに以下のように追加することで、ライブラリとそのサンプルを動作させました。
#add_subdirectory(vendor/json)
#add_subdirectory(vendor/json-schema-validator)
#target_link_libraries(${PROJECT_NAME} nlohmann_json::nlohmann_json nlohmann_json_schema_validator)
しかし、もし私のプロジェクトをビルドする唯一の方法がパッケージマネージャを使わないことであるなら、パッケージマネージャを使って私の生活を楽にすることに何の意味があるのでしょうか?
どなたかこのような問題に遭遇された方、または私が試したり変更したりできる別のアイデアをお持ちの方はいらっしゃいますか?
どんなことでもご相談ください。では、よろしくお願いします。
解決方法は?
どこにチュートリアルやサンプル、説明があるかわかりませんが、公式のcmake-conanの README には、機能的な例が含まれています。
とはいえ、あなたの場合は、次のような例で解決できます。
cmake_minimum_required(VERSION 3.5)
project(validator CXX)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake"
EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
TLS_VERIFY ON)
endif()
include(${CMAKE_BINARY_DIR}/conan.cmake)
conan_cmake_configure(REQUIRES json-schema-validator/2.1.0
GENERATORS cmake_find_package)
conan_cmake_autodetect(settings)
conan_cmake_install(PATH_OR_REFERENCE .
BUILD missing
REMOTE conan-center
SETTINGS ${settings})
find_package(nlohmann_json_schema_validator REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} nlohmann_json_schema_validator::nlohmann_json_schema_validator)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
CMakeの変数ではなく、CMakeのターゲットを使っています。
CONAN_LIBS
を要求しています。
cmake_find_package
ジェネレータを使用します。最近のCMakeのアプローチです。
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】Enterキーを押して続行する
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】C++の余分な資格エラー
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] usr/bin/ld: -l<nameOfTheLibrary> が見つかりません。