依赖p4est库的程序windows运行方法----支持vs2022调试
一.前置环境1.vs2022且包含CLangCL工具集没有安的在vs的intaller里边修改已安装的vs2022在右侧目录里勾选上使用c进行桌面开发/适用于windows的CClang工具。2.安装MS-MPI,安在默认位置即可https://www.microsoft.com/en-us/download/details.aspx?id57467这一步将msmpisdk.msi和msmpisetup.exe分别安装。3.下载Cmake二.获取p4est源码这一步需要注意了1.这是p4est作者提供的网址https://github.com/cburstedde/p4est/blob/master/INSTALL_WINDOWS进去后下载源代码库的压缩包坑人的一点来了就是下图中蓝色的sc81b9596它不在下载的压缩包中所以还得单独把sc这才是p4est的主要include库下载下来。解压后改名为sc复制到p4est-master里边。三.p4est的windows库文件生成最难的一步这一步的参考文献虽然不能直接用但是有一定参考价值为https://blog.csdn.net/2301_81647724/article/details/1463357961.为了适应windows系统得做一些代码的修改首先在vscode里边打开整个p4est-master文件夹1p4est_algorithms.c的50行p4est_ghost.c的52行p6est.c的53行p6est_ghost.c的26行p8est_algorithms.c的26行p8est_ghost.c的28行添加#define htonl(_val) ( ((uint16_t)(_val) 0xff00) 8 | ((uint16_t)(_val) 0xff) 8 )2p4est作者说的这些File sc/src/sc.h line 96://#include libgen.hFile sc/src/sc.h line 121: #define __attribute__(x)File sc/test/test_node_comm.c line 36: #define srandom srand #define random rand In files src/p4est_algorithms.c, p8est_algorithms.c, p6est.c Include definitions of htonl-function #define htonl(_val) ( ((uint16_t)(_val) 0xff00) 8 | ((uint16_t)(_val) 0xff) 8 )File test/test_balance_seeds2.c line 33: #define srandom srand #define random rand都改了就行3然后进行Cmake 在./p4est-master文件夹下建立一个build的文件夹跟参考不同的就是勾上MPI去掉ZLIBMPI路径需要设置你就设置成MS-MPI的俩路径就行跟我一样应该就不用设置了。configuregenerateopen project依次点击等待就行然后就生成项目进入vs2022了。在这生成解决方案会报一个basename错误不要慌我们得在(sc_containers.c)文件末尾加上#ifdef _WIN32 #include string.h /* Provide a basename implementation for Windows. Returns the last component of a path. The original string is not modified. */ char* basename(char* path) { char *p strrchr(path, /); if (!p) p strrchr(path, \\); return p ? p 1 : path; } /* Provide dirname if needed */ char* dirname(char* path) { char *p strrchr(path, /); if (!p) p strrchr(path, \\); if (!p) return .; *p \0; return path; } #endif在sc/src/sc.h中加上所有的include之后#ifdef _WIN32 char* basename(char* path); char* dirname(char* path); #endif这个时候重新生成解决方案应该就成功了如果有其他错误就上网搜搜或者问问AI应该可以解决大概率就是前面改成windows适用版本的细节我忘记了一部分。四.p4est.lib和sc.lib第三步得到的东西的使用建议先用vs2022命令行测试打开x64 Native Tools Command Prompt for VS 2022然后编译运行一个测试文件这里说一下编译命令哦可能有好多人不会命令行测试为了保护我的隐私路径是需要你自己改成自己的大家应该看得懂cl p4est_step1.c ^ /I***\p4est-master\src ^ /I***\p4est-master\sc\src ^ /I***\p4est-master\build\sc\include ^ /I***\p4est-master\build\include ^ /IC:\Program Files (x86)\Microsoft SDKs\MPI\Include ^ /DSC_HAVE_MPI /DP4EST_HAVE_MPI ^ /MDd ^ /Fe:test_p4est_basic.exe ^ ***\p4est-master\build\Debug\p4est.lib ^ ***\p4est-master\build\sc\Debug\sc.lib ^ C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x64\msmpi.lib我也把我的测试文件贴出来了#include mpi.h #include stdio.h #include stdlib.h /* 包含 p4est 3D 接口通过宏转为 p8est */ #include p4est_to_p8est.h #include p8est_extended.h #include p8est_iterate.h /* 自定义数据结构存储单元中心坐标和体积 */ typedef struct { double center[3]; double volume; } user_data_t; /* 初始化函数在新建单元时调用 */ static void init_quadrant(p4est_t* p4est, p4est_topidx_t which_tree, p4est_quadrant_t* q) { user_data_t* data (user_data_t*)q-p.user_data; double midpoint[3]; /* 获取单元中心坐标3D */ p8est_quadrant_centroid(p4est-connectivity, which_tree, q, midpoint); >***\p4est-master\src ***\p4est-master\sc\src ***\p4est-master\build\sc\include ***\p4est-master\build\include C:\Program Files (x86)\Microsoft SDKs\MPI\Include4链接器 → 常规 → 附加库目录添加***\p4est-master\build\Debug ***\p4est-master\build\sc\Debug C:\Program Files (x86)\Microsoft SDKs\MPI\Lib\x645链接器 → 输入 → 附加依赖项添加p4est.lib sc.lib msmpi.lib6C/C → 预处理器 → 预处理器定义添加SC_HAVE_MPI P4EST_HAVE_MPI _CRT_SECURE_NO_WARNINGS _USE_MATH_DEFINES ssize_tint7右键 → 属性 → 配置属性 → 常规 → 平台工具集 → 选择ClangCL8此时运行typedef SSIZE_T ssize_t;会报错解决办法就是在sc.h文件中注释掉我所注释的部分加上我所加的部分即可////#ifdef SC_HAVE_UNISTD_H ////#include unistd.h ////#elif defined _WIN32 ////#include BaseTsd.h ////typedef SSIZE_T ssize_t; ////#endif #ifdef _WIN32 #ifndef ssize_t #ifdef _MSC_VER typedef long long ssize_t; #else typedef long ssize_t; #endif #endif #endif这样就大功告成啦你就可以在vs2022中运行调试你自己编写但依赖p4est库的程序了!!!!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477232.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!