我尝试使用 cmake 来制作项目,但它调用了错误 ld: library not found for -levmc::loader

张品戈*_*张品戈 5 c++ makefile cmake ethereum evm

我 git clone 了一个名为evmc 的项目

\n

我尝试构建示例文件夹通过 cmake 在此项目中但这里有一些错误称为:

\n

cmake .

\n
-- Configuring done\nCMake Error at CMakeLists.txt:23 (add_executable):\n  Target "evmc-example" links to target "evmc::evmc_cpp" but the target was\n  not found.  Perhaps a find_package() call is missing for an IMPORTED\n  target, or an ALIAS target is missing?\n\n\nCMake Error at CMakeLists.txt:23 (add_executable):\n  Target "evmc-example" links to target "evmc::loader" but the target was not\n  found.  Perhaps a find_package() call is missing for an IMPORTED target, or\n  an ALIAS target is missing?\n\n\nCMake Error at CMakeLists.txt:19 (add_executable):\n  Target "evmc-example-static" links to target "evmc::evmc_cpp" but the\n  target was not found.  Perhaps a find_package() call is missing for an\n  IMPORTED target, or an ALIAS target is missing?\n\n\nCMake Error at CMakeLists.txt:19 (add_executable):\n  Target "evmc-example-static" links to target "evmc::evmc" but the target\n  was not found.  Perhaps a find_package() call is missing for an IMPORTED\n  target, or an ALIAS target is missing?\n\n\nCMake Error at CMakeLists.txt:19 (add_executable):\n  Target "evmc-example-static" links to target "evmc::evmc" but the target\n  was not found.  Perhaps a find_package() call is missing for an IMPORTED\n  target, or an ALIAS target is missing?\n\n\nCMake Error at CMakeLists.txt:16 (add_library):\n  Target "evmc-example-host" links to target "evmc::evmc_cpp" but the target\n  was not found.  Perhaps a find_package() call is missing for an IMPORTED\n  target, or an ALIAS target is missing?\n\n\nCMake Error at example_vm/CMakeLists.txt:10 (add_library):\n  Target "example-vm-static" links to target "evmc::evmc" but the target was\n  not found.  Perhaps a find_package() call is missing for an IMPORTED\n  target, or an ALIAS target is missing?\n\n\nCMake Error at example_vm/CMakeLists.txt:5 (add_library):\n  Target "example-vm" links to target "evmc::evmc" but the target was not\n  found.  Perhaps a find_package() call is missing for an IMPORTED target, or\n  an ALIAS target is missing?\n\n\nCMake Error at example_precompiles_vm/CMakeLists.txt:10 (add_library):\n  Target "example-precompiles-vm-static" links to target "evmc::evmc" but the\n  target was not found.  Perhaps a find_package() call is missing for an\n  IMPORTED target, or an ALIAS target is missing?\n\n\nCMake Error at example_precompiles_vm/CMakeLists.txt:5 (add_library):\n  Target "example-precompiles-vm" links to target "evmc::evmc" but the target\n  was not found.  Perhaps a find_package() call is missing for an IMPORTED\n  target, or an ALIAS target is missing?\n\n\n-- Generating done\nCMake Generate step failed.  Build files cannot be regenerated correctly.\nmake: *** [cmake_check_build_system] Error 1\n
Run Code Online (Sandbox Code Playgroud)\n

make

\n
Consolidate compiler generated dependencies of target evmc-example-host\n[ 14%] Built target evmc-example-host\nConsolidate compiler generated dependencies of target evmc-example\n[ 21%] Linking CXX executable evmc-example\nld: library not found for -levmc::loader\nclang: error: linker command failed with exit code 1 (use -v to see invocation)\nmake[2]: *** [evmc-example] Error 1\nmake[1]: *** [CMakeFiles/evmc-example.dir/all] Error 2\nmake: *** [all] Error 2\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的 CMakeLists:

\n
# EVMC: Ethereum Client-VM Connector API.\n# Copyright 2016-2019 The EVMC Authors.\n# Licensed under the Apache License, Version 2.0.\n\ncmake_minimum_required(VERSION 3.13)\n\nset (CMAKE_C_COMPILER /usr/bin/clang)\nset (CMAKE_CXX_COMPILER /usr/bin/clang++)\nset (CMAKE_CXX_STANDARD 17)\n\ninclude(GNUInstallDirs)\n\nadd_subdirectory(example_vm)\nadd_subdirectory(example_precompiles_vm)\n\nadd_library(evmc-example-host STATIC example_host.cpp)\ntarget_link_libraries(evmc-example-host PRIVATE evmc::evmc_cpp)\n\nadd_executable(evmc-example-static example.c)\ntarget_link_libraries(evmc-example-static PRIVATE evmc-example-host evmc::example-vm-static evmc::evmc)\ntarget_compile_definitions(evmc-example-static PRIVATE STATICALLY_LINKED_EXAMPLE)\n\nadd_executable(evmc-example example.c)\ntarget_link_libraries(evmc-example PRIVATE evmc-example-host evmc::loader)\n\ninclude_directories(../include)\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的项目结构:

\n
evmc\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 AUTHORS.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CHANGELOG.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeCache.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CNAME\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CPackConfig.cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CPackSourceConfig.cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Cargo.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Doxyfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 LICENSE\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 appveyor.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 bindings\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 java\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 rust\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeCache.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeFiles\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CPackConfig.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CPackSourceConfig.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake_install.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 evmcConfig.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 evmcConfigVersion.cmake\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 circle.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Config.cmake.in\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 EVMC.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Hunter\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 cable\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake_install.cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 codecov.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 EVMC.md\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Host_Guide.md\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 VM_Guide.md\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 VM_Tester.md\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 custom.dox\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 evmcConfig.cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 evmcConfigVersion.cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeCache.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeFiles\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake_install.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example-rust-vm\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example.c\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example_host.cpp\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example_host.h\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example_precompiles_vm\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example_vm\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 libevmc-example-host.a\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 use_evmc_in_cmake\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 use_instructions_in_cmake\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 go.mod\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 evmc\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeFiles\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake_install.cmake\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 hex\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 instructions\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 loader\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mocked_host\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 target\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CACHEDIR.TAG\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 debug\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmake_package\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 compilation\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 examples\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 gomod\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tools\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 unittests\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vmtester\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tools\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 commands\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 evmc\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 utils\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vmtester\n
Run Code Online (Sandbox Code Playgroud)\n

我已经升级了我在这个项目中使用的所有工具:clang、cmake...

\n

但还是无法正常运行,怎么办?

\n

tas*_*hyy -1

这发生在我身上,因为我用于库的路径不正确,它没有指向包含 CMakeLists.txt 的目录。

我在顶级 CMakeLists.txt 中使用 FetchContent 包含 cpr,并意外将 FETCHCONTENT_SOURCEDIR_CPR 设置为上述级别。我在 cpr/cpr-master 中有 cpr 源,但刚刚将其设置为 cpr。

更笼统地回答,这意味着 evmc 的路径可能不正确。