gpt4 book ai didi

linker - 使用 CMake 链接到 Armadillo 库

转载 作者:行者123 更新时间:2023-12-04 16:46:14 25 4
gpt4 key购买 nike

我正在尝试在 Windows 8 上安装 MLPack。
我配置 CMakeLists.txt 文件:

set(ARMADILLO_LIBRARY "C:\\Program Files (x86)\\armadillo\\lib")
set(ARMADILLO_INCLUDE_DIR "C:\\Program Files (x86)\\armadillo\\include")

然后当我运行 CMake 时,我收到了一系列警告,如下所示:
WARNING: Target "mlpack" requests linking to directory "C:\Program Files (x86)\armadillo\lib".  Targets may link only to libraries.  CMake is dropping the item.

在\mlpack-1.0.4\src\mlpack 目录中,我找到了另一个 CMakeLists 文件:
target_link_libraries(mlpack
${ARMADILLO_LIBRARIES}
${Boost_LIBRARIES}
${LIBXML2_LIBRARIES}
)

我改为(不确定这是否是个好主意):
target_link_libraries(mlpack
${Boost_LIBRARIES}
)
link_directories(mlpack
${ARMADILLO_LIBRARIES}
${LIBXML2_LIBRARIES}
)

然后 CMake 似乎运行顺利:
-- Found Armadillo: C:\Program Files (x86)\armadillo\lib (found suitable version "3.800.2", minimum required is "2.4.2")
-- Found LibXml2: C:\cpp\libraries\libxml2-2.7.8.win32\lib (found suitable version "2.7.8", minimum required is "2.6.0")
-- Boost version: 1.53.0
-- Found the following Boost libraries:
-- program_options
-- unit_test_framework
-- Boost version: 1.53.0
-- Found the following Boost libraries:
-- random
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Configuring done
-- Generating done
-- Build files have been written to: C:/cpp/libraries/mlpack-1.0.4

但是现在运行 make 我有很多这样的错误:
Linking CXX executable ..\..\..\..\gmm.exe
CMakeFiles\gmm.dir/objects.a(gmm_main.cpp.obj):gmm_main.cpp:(.text+0xb9): undefined reference to `wrapper_dgemv_'
CMakeFiles\gmm.dir/objects.a(gmm_main.cpp.obj):gmm_main.cpp:(.text$_ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb[__ZN4arma6auxlib10det_lapackIdEET_RKNS_3MatIS2_EEb]+0x115): undefined reference to `wrapper_dgetrf_'

经过调查,这似乎与 Armadillo 有关。

知道发生了什么吗?我想我应该为 Armadillo 使用 target_link_libraries,但我不确定如何。

最佳答案

希望这个问题很容易解决。当你这样做...

set(ARMADILLO_LIBRARY "C:\\Program Files (x86)\\armadillo\\lib")
set(ARMADILLO_INCLUDE_DIR "C:\\Program Files (x86)\\armadillo\\include")

你有效地短路了 find_package(Armadillo 2.4.2 REQUIRED)调用,因为它希望必须完成查找这些路径的工作。然而,当 find_package完成工作,变量 ARMADILLO_LIBRARY设置为库本身的路径 - 而不是 lib 目录的路径。

所以问题归结为设置 ARMADILLO_LIBRARY到 lib 目录的路径,而不是 lib 本身。这最终会产生链接器错误,因为目标 gmm (在 src\mlpack\methods\gmm\CMakeLists.txt 中添加)链接到 mlpack , 和 mlpack已设置为链接到 ${ARMADILLO_LIBRARIES} ,设置不正确。

原来 find_package(Armadillo ...)已经 checkin "$ENV{ProgramFiles}/Armadillo/lib""$ENV{ProgramFiles}/Armadillo/include" ,我希望这些解析为 "C:\\Program Files (x86)\\armadillo\\lib""C:\\Program Files (x86)\\armadillo\\include"在你的机器上。

所以要解决这个问题,你应该删除行设置 ARMADILLO_LIBRARYARMADILLO_INCLUDE_DIR ,并恢复您在 src\mlpack\CMakeLists.txt 中的更改(无论如何,使用 link_directories 通常是一个坏主意)。

进行这些更改后,您应该至少删除 CMakeCache.txt(在构建树的根目录中),甚至在重新运行 CMake 之前删除整个构建树,以避免使用先前失败尝试中的错误缓存值的可能性。

关于linker - 使用 CMake 链接到 Armadillo 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com