• 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 到依赖库目录下解决。


  • 相关阅读:
    在Fedora10上安装MySQL5.0.18,告捷!
    直接修改class文件内容即使是文本会导致App异常,正确方式是修改java再用生成的class替换掉原有的class
    生命的真谛不在于你呼吸的次数,而在于那些令你无法呼吸的时刻
    开放Fedora10自带的MySQL5.0.67的对外数据库服务
    重装上了Fedora8自带的MySQL5.0.45,再试,告捷!!
    Shell程序荟萃
    程序的价值
    两条Find指令
    Linux防火墙配置
    在Foreda8上安装libaio-0.3.105-2.i386.rpm
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/14536912.html
Copyright © 2020-2023  润新知