如何在Windows平台编译基于GMP的C动态库?
编译静态链接GMP的Windows C动态库实践及跨平台方案求助
背景与遇到的问题
我不是专业程序员,仅偶尔编写自用代码,经验有限。此前只在Linux(CMake + gcc/g++)、Android(Termux,CMake + clang)环境下开发,CMake代码仅适配这类参数相近的编译器,完全没做MSVC的兼容处理。
近期需要编译一个静态链接GMP的C动态库供Windows平台使用,但尝试多种方式都遇到阻碍:
- 尝试VS2022、VSCode+MSVC编译时,因对MSVC编译流程陌生,折腾后以失败告终
- 用vcpkg编译GMP,耗时超1小时,最终选择放弃
- 不愿为适配Windows改用MPIR重写现有代码
成功编译的步骤
最终我通过MinGW环境完成了Windows版DLL的编译,具体操作如下:
- 安装MinGW-w64环境,确保gcc、g++、CMake工具可用
- 手动编译GMP静态库:
- 下载GMP源码包,解压后进入目录
- 执行
./configure --enable-static --disable-shared --prefix=<安装路径>配置编译选项 - 依次执行
make、make install完成GMP静态库的编译与安装
- 调整原有CMakeLists.txt:
- 指定GMP的头文件路径(
include_directories(<GMP安装路径>/include)) - 指定GMP静态库路径并链接(
link_directories(<GMP安装路径>/lib),target_link_libraries(你的库名 libgmp.a))
- 指定GMP的头文件路径(
- 生成编译文件并编译:
- 执行
cmake -G "MinGW Makefiles" ..生成Makefile - 执行
make编译得到目标DLL
- 执行
寻求更优跨平台方案
虽然已经成功编译出Windows版本,但现有方案需要单独搭建MinGW环境,且CMake代码仍未实现真正的跨平台兼容。想请教:有没有更高效的跨平台编译方案,能让同一套CMake代码同时适配Linux、Android、Windows(含MSVC环境),无需为不同平台做大量定制修改,同时能高效处理GMP这类依赖库的编译与链接?
内容的提问来源于stack exchange,提问作者ENIAC
相关产品推荐
相关产品推荐

