【发布时间】:2013-04-03 02:51:50
【问题描述】:
我正在尝试在 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_'
经过调查,似乎与犰狳有关。
知道发生了什么吗?我想我应该为犰狳使用 target_link_libraries,但我不确定如何。
【问题讨论】:
-
是的,你肯定需要 target_link_libraries() 在你自己的 CMakeLists.txt 中链接到犰狳。你能发布你的完整/相关部分 CMakeLists.txt
-
非常感谢。我想知道我是否真的可以发布整个文件,它很长。对于相关部分,我刚刚找到了一行“find_package(Armadillo 2.4.2 REQUIRED)”,后来又找到了一行“include_directories(${ARMADILLO_INCLUDE_DIRS})”。但我是真正的初学者,我可能肯定会错过一些东西。完整文件在这里:mlpack.org/files/mlpack-1.0.4.tar.gz我刚刚做了帖子中描述的更改...
-
添加如下内容:target_link_libraries(gmm.exe ${ARMADILLO_LIBRARIES})。看看这是否有效。或者只是使用“gmm”而不是“gmm.exe”再试一次
-
用 .exe 尝试过,cmake 抱怨 gmm.exe 不是用这个项目构建的。如果没有 .exe,cmake 会抱怨 gmm 未在此目录中构建...
标签: linker cmake armadillo mlpack