【问题标题】:Cmake not able to recognize cache entry for FOLLY_LIBRARIES while installing fbtorch using luarocks使用 luarocks 安装 fbtorch 时,Cmake 无法识别 FOLLY_LIBRARIES 的缓存条目
【发布时间】:2018-05-05 18:58:48
【问题描述】:

我正在尝试在 Linux 上安装 fbtorch。但是,当我尝试运行 luarocks install fbtorch 时,出现以下错误。

cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="/home/user/torch/install/bin/.." -DCMAKE_INSTALL_PREFIX="/home/user/torch/install/lib/luarocks/rocks/fbtorch/scm-1"

fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Torch7 in /home/user/torch/install
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  REQUIRED_ARGS (missing: FOLLY_INCLUDE_DIR FOLLY_LIBRARIES)
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindFolly.cmake:23 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:12 (FIND_PACKAGE)


-- Configuring incomplete, errors occurred!
See also "/tmp/luarocks_fbtorch-scm-1-4920/fbtorch/build/CMakeFiles/CMakeOutput.log".

现在,为了修复 REQUIRED_ARGS (missing: FOLLY_INCLUDE_DIR FOLLY_LIBRARIES),我将 cmake 命令更改为:

cmake -E make_directory build && cd build && cmake .. -DFOLLY_LIBRARIES="/home/user/local/lib" -DFOLLY_INCLUDE_DIR="/home/user/local/include" -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="$(LUA_BINDIR)/.." -DCMAKE_INSTALL_PREFIX="$(PREFIX)"

请注意,我已经在适当的目录中编译并安装了folly /home/user/local/

这修复了FOLLY_INCLUDE_DIR 错误,但它仍然显示FOLLY_LIBRARIES 的错误,如下所示:

CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  REQUIRED_ARGS (missing: FOLLY_LIBRARIES)
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindFolly.cmake:23 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:12 (FIND_PACKAGE)

我在这里缺少什么?为什么 cmake 可以识别 FOLLY_INCLUDE_DIR 的缓存条目,但不能识别 FOLLY_LIBRARIES?

【问题讨论】:

    标签: cmake luarocks


    【解决方案1】:

    find_package() 调用中“错过”列表中列出的变量不需要CACHE 变量。因此,设置同名缓存变量可能无法解决问题。

    如果搜索到的包实际安装到非标准位置,与其盲目设置“缺失”变量,不如提示关于该位置的“查找”脚本.

    许多“查找”脚本在其代码的开头描述了可能的参数化方式。除此之外,还有常用方法可以提示“查找”脚本关于包的实际位置;这些方式适用于大多数脚本。例如。您可以将包的安装位置添加到 CMAKE_PREFIX_PATH 变量中(参见that question)。

    【讨论】:

    • 感谢您的建议。在 CMAKE_PREFIX_PATH 中添加安装路径有帮助,现在安装继续进行,但随后我收到另一个 make 错误/usr/bin/ld: cannot find -lfolly。你有什么建议可以克服这个问题吗?
    • @AshutoshBaheti 这是他们构建脚本中的一个错误。他们打电话给TARGET_LINK_LIBRARIES(fbtorch_ext folly),而实际上他们应该打电话给target_link_libraries(fbtorch_ext ${FOLLY_LIBRARIES})。那些构建脚本非常混乱,如果我是你,我不会依赖其中的任何东西正常工作。
    • 我将尝试手动更改该 cmakelist 并查看它是否有效。感谢您的建议!
    • @ComicSansMS 我尝试设置 -DTorch_INSTALL_LIB="path to library" 因为他们有 LINK_DIRECTORIES("${Torch_INSTALL_LIB}") 但这不起作用。你能想出这不起作用的可能原因吗?
    • @ComicSansMS 哇,您更改target_link_libraries(fbtorch_ext ${FOLLY_LIBRARIES}) 的建议奏效了!我分叉了 repo,对其进行了更改并从分叉版本安装了它。感谢您的帮助!
    【解决方案2】:

    如果您查看FindFolly.cmake,您可以看到这条线 -

    SET(FOLLY_LIBRARIES ${FOLLY_LIBRARY})
    

    这意味着正在设置FOLLY_LIBRARIES,但它需要FOLLY_LIBRARY

    所以在你的命令行中将-DFOLLY_LIBRARIES 更改为-DFOLLY_LIBRARY

    【讨论】:

    • -1,在您提到的set 上方有一个find_library 呼叫FOLLY_LIBRARY。当然,脚本应该为那里的 folly 目录提供一个自定义点(通过该 find 调用的 HINTSPATHS 参数),但完全绕过 find 调用只能作为最后的手段。
    • @ComicSansMS:当有人只需要“让事情正常运行”时,此答案中描述的“技术”很有用。如果“查找”脚本错误(并且根据 cmets 对我的回答,该脚本实际上是错误的),则可能真的需要它。此外,当安装包的布局与“查找”脚本所期望的不同时,这种“hack”可能很有用。但我同意你的说法... should only be used as a very last resort.
    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 2015-08-20
    • 2018-08-03
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2013-08-03
    相关资源
    最近更新 更多