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,添加到工程中即可解决。


第二次报错

报错:

无法打开输入文件“Release\bff.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 到依赖库目录下解决。


posted @ 2021-03-15 12:39  fengMisaka  阅读(418)  评论(0编辑  收藏  举报