zoukankan      html  css  js  c++  java
  • CMake编译boundary-first-flattening总结

    开发环境:Win10 + CMake3.20.0 + VS2019

    需要用到一个用于 UV 贴图的工具库:boundary-first-flattening ,所以这里需要先 CMake 编译下该源码库,注意以下均编译 32 位的 Release 库。

    在编译前仔细查阅其 README.md 文件,发现下述对编译有帮助的信息:

    CMake_SuiteSparse_A.png


    库的 deps 文件夹有一些编译要用到的库。这个库可以编译出命令行版本和 GUI 版本,都依赖 SuiteSparse 库,所以需要先编译 SuiteSparse。


    一、CMake编译SuiteSparse

    SuiteSparse 的下载链接为:https://github.com/jlblancoc/suitesparse-metis-for-windows/releases

    具体过程可参考我的另一篇博客,这里不再赘述:Windows下使用CMake编译SuiteSparse成VS工程


    二、CMake编译boundary-first-flattening

    编译好了所依赖的库后,这时可以正式开始编译了。


    1. SuiteSparse NOT FIND

    cmake-gui 添加好目录路径后,第一次 configure 则会报错:SuiteSparse NOT FIND。说明需要先添加事先编译好的 SuiteSparse 库路径。解决办法如下:

    # ------------------------------------------------------------------
    # Detect SuiteSparse libraries:
    # If not found automatically, set SuiteSparse_DIR in CMake to the
    # directory where SuiteSparse-config.cmake was installed.
    # ------------------------------------------------------------------
    

    即在 CMakeLists.txt 添加:

    set(SuiteSparse_DIR F:/work/CMake/suitesparse-metis-for-windows/build/install/lib/cmake/suitesparse-5.4.0/)
    

    2. LAPACK_DIR NOT FIND

    第二次 configure 则会报错:LAPACK_DIR NOT FIND。解决办法如下:

    set(LAPACK_DIR E:/work/suitesparse-metis-for-windows/lapack_windows/x32/)
    

    然后配置即可成功,点击 Generate 即可生成 sln 解决方案文件。


    三、解决工程编译报错

    一般工程直接编译不会一次成功,需要解决头文件缺失或依赖库缺失等七七八八的问题,果不其然,这个库编译会报一堆错误:


    第一次报错

    报错:

    libopenblas.a(memory.obj) : error LNK2019: 无法解析的外部符号 __imp___cprintf,函数 _blas_memory_alloc 中引用了该符号
    libopenblas.a(xerbla.obj) : error LNK2001: 无法解析的外部符号 __imp___cprintf
    libopenblas.a(dgemm_thread_tt.obj) : error LNK2001: 无法解析的外部符号 ___chkstk_ms ......
    

    可以看出是 libopenblas.a 这个静态库依赖导致的,根据前面 README 的提示,使用 Everything 查找到 libopenblas.dll.a,添加到工程中即可解决。


    第二次报错

    报错:

    无法打开输入文件“Releaseff.lib”
    

    打开 Release 目录,发现不存在 bff.lib 静态库文件,使用 Everything 查找到拷贝过来,但报了新的一连串错误:

    无法解析的外部符号 "public: bool __thiscall bff::BFF::flatten(class bff::DenseMatrix &,bool)"
    ......
    

    这个错误卡了整整将近一天,本质上还是静态库缺失,找不到 bff.lib 所提供的 flatten 等函数功能,但 Git 工程下载提供了一个 bff.lib 添加到工程库路径里了,这里误导我了,以为是没添加成功或者需要添加其他依赖静态库的原因。

    其实不是,其实是官方提供下载的 bff.lib 不能被我当前的 VS2019 这个开发环境所正确且成功调用,添加了错误的 bff.lib 相当于没添加。解决方案中的 bff 项目默认是编译 dll 的,我在属性配置改为编译 lib,但还是会自动编译出 dll,尝试了各种办法无效,无奈只能新创建个 bff 工程,添加头文件、源文件和依赖库之后才成功编译出 bff.lib 文件,使用这个 bff.lib 才能解决这个报错。

    后面其他子工程报这种类型错误(BFF::flatten),也可以通过添加 bff.lib 到依赖库目录下解决。


  • 相关阅读:
    STL中set底层实现方式? 为什么不用hash?
    main 主函数执行完毕后,是否可能会再执行一段代码?(转载)
    计算机网络(转载)
    2014! 的末尾有多少个0
    最常见的http错误
    内存分配(转载)
    delphi中指针操作符^的使用
    虚拟方法virtual的用法
    调用父类方法
    指针
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/14536912.html
Copyright © 2011-2022 走看看