【问题标题】:Linking MLPACK, Armadillo and LAPACK/BLAS in Qt Creator Project in Windows 7在 Windows 7 的 Qt Creator 项目中链接 MLPACK、Armadillo 和 LAPACK/BLAS
【发布时间】:2014-10-16 20:32:43
【问题描述】:

我正在尝试将 MLPACK 与我在 Qt Creator 中的项目集成(使用 MinGW 作为编译器)并且我不断收到与 LAPACK 和 Armadillo 相关的链接错误。 我自己编译了 LAPACK 和 BLAS 并运行了一个测试脚本,那里的一切似乎都很好。此外,我使用启用了 LAPACK 和 BLAS 的 CMake-gui 编译了 Armadillo(没有包装器),并且 example1.cpp 编译并运行没有问题。 MLPACK 编译并找到所有需要的依赖项。

我的 .pro 文件有以下内容:

## Armadillo
INCLUDEPATH += $$PWD/MLPACK/dependencies/armadillo/include

## LAPACK
unix|win32: LIBS += -L$$PWD/MLPACK/dependencies/lapack/ -llapack

## BLAS
unix|win32: LIBS += -L$$PWD/MLPACK/dependencies/blas/ -lblas

## LibXML2
unix|win32: LIBS += -L$$PWD/MLPACK/dependencies/libxml2/lib/ -lxml2
INCLUDEPATH += $$PWD/MLPACK/dependencies/libxml2/include
DEPENDPATH += $$PWD/MLPACK/dependencies/libxml2/include
unix|win32-g++: PRE_TARGETDEPS += $$PWD/MLPACK/dependencies/libxml2/lib/libxml2.a

## Boost
unix|win32: LIBS += -L$$PWD/../../boost_1_54_0/stage/lib/ -lboost_program_options-mgw48-mt-1_54
INCLUDEPATH += $$PWD/../../boost_1_54_0
DEPENDPATH += $$PWD/../../boost_1_54_0
unix|win32-g++: PRE_TARGETDEPS += $$PWD/../../boost_1_54_0/stage/lib/libboost_program_options-mgw48-mt-1_54.a

unix|win32: LIBS += -L$$PWD/../../boost_1_54_0/stage/lib/ -lboost_random-mgw48-mt-1_54
unix|win32-g++: PRE_TARGETDEPS += $$PWD/../../boost_1_54_0/stage/lib/libboost_random-mgw48-mt-1_54.a

unix|win32: LIBS += -L$$PWD/../../boost_1_54_0/stage/lib/ -lboost_unit_test_framework-mgw48-mt-1_54
unix|win32-g++: PRE_TARGETDEPS += $$PWD/../../boost_1_54_0/stage/lib/libboost_unit_test_framework-mgw48-mt-1_54.a

## MLPACK
unix|win32: LIBS += -L$$PWD/MLPACK/lib/ -lmlpack
INCLUDEPATH += $$PWD/MLPACK/include
DEPENDPATH += $$PWD/MLPACK/include
unix|win32-g++: PRE_TARGETDEPS += $$PWD/MLPACK/lib/libmlpack.a

当我编译我的项目时,我得到了这个:

C:/Workspace/OffLineSorter/MLPACK/lib//libmlpack.a(pca.cpp.obj):pca.cpp:(.text$_ZN4arma6auxlib11svd_dc_econIdNS_3MatIdEEEEbRNS2_IT_EERNS_3ColIS4_EES6_RKNS_4BaseIS4_T0_EE[__ZN4arma6auxlib11svd_dc_econIdNS_3MatIdEEEEbRNS2_IT_EERNS_3ColIS4_EES6_RKNS_4BaseIS4_T0_EE]+0x24f): undefined reference to `dgesdd_'
Makefile.Debug:252: recipe for target 'debug\OffLineSorter.exe' failed
C:/Workspace/OffLineSorter/MLPACK/lib//libmlpack.a(pca.cpp.obj):pca.cpp:(.text$_ZN4arma6auxlib8svd_econIdNS_3MatIdEEEEbRNS2_IT_EERNS_3ColIS4_EES6_RKNS_4BaseIS4_T0_EEc[__ZN4arma6auxlib8svd_econIdNS_3MatIdEEEEbRNS2_IT_EERNS_3ColIS4_EES6_RKNS_4BaseIS4_T0_EEc]+0x286): undefined reference to `dgesvd_'
C:/Qt/Qt5.3.0/Tools/mingw482_32/bin/../lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: C:/Workspace/OffLineSorter/MLPACK/lib//libmlpack.a(pca.cpp.obj): bad reloc address 0x286 in section `.text$_ZN4arma6auxlib8svd_econIdNS_3MatIdEEEEbRNS2_IT_EERNS_3ColIS4_EES6_RKNS_4BaseIS4_T0_EEc[__ZN4arma6auxlib8svd_econIdNS_3MatIdEEEEbRNS2_IT_EERNS_3ColIS4_EES6_RKNS_4BaseIS4_T0_EEc]'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [debug\OffLineSorter.exe] Error 1
mingw32-make[1]: Leaving directory 'C:/Workspace/build-OffLineSorter-Desktop_Qt_5_3_0_MinGW_32bit-Debug'
mingw32-make: *** [debug] Error 2
Makefile:34: recipe for target 'debug' failed

关于我可能做错了什么的任何想法? 感谢您的帮助!

【问题讨论】:

    标签: c++ qt armadillo mlpack


    【解决方案1】:

    你能试试最近发布的 mlpack 1.0.10 吗?我重写了 CMake FindArmadillo 脚本,以便它正确检测何时未使用 ARMA_USE_WRAPPER(在您的情况下是这样)并直接链接到 LAPACK 或 BLAS。

    它没有在你的特定设置(MinGW + Win7)中进行测试,因为我还没有机会设置那个编译环境,但我认为它应该会更好。

    您可能还想查阅 mlpack 邮件列表档案;过去有一些关于使用 MinGW 的讨论: https://mailman.cc.gatech.edu/pipermail/mlpack/

    谢谢,

    瑞恩

    【讨论】:

    • 嗨瑞恩,感谢您的帮助。我确实设法让它最终编译。我不得不对 CMakeLists.txt 文件进行大量更改,但最终它奏效了。具体来说,为了解决这个问题,我必须重新排序链接器命令的库,因为 BLAS 和 LAPACK 不是列表中的最后一个。现在一切正常!再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多