Windows下使用mingw64编译msvc版本libffi
- 1.使用vcpkg下载vc14_x64版本
- 1.1 安装vcpkg
- 1.2 安装libffi
- 1.3 cmake集成
- 2.通过Github的winlibs编译任意版本
- 3.通过newlawrence的版本编译3.2.1
- 4.使用mingw64通过cl.exe编译vs16_x64版本
1.使用vcpkg下载vc14_x64版本
1.1 安装vcpkg
前提条件
- Windows 7 or newer
- Git
- Visual Studio 2015 Update 3 or greater with the English language pack
执行一下命令安装vcpkg
git clone https://github/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
1.2 安装libffi
执行
vcpkg install libffi --triplet x64-windows
–triplet是指定二进制版本,如果是32位则是x86-windows
使用 x64-windows-static 则是x64版本静态链接库
动态库版本包括这些文件:
- ffi.h (C:\Program Files\vcpkg\installed\x64-windows\include) header files
- ffitarget.h (C:\Program Files\vcpkg\installed\x64-windows\include) header files
- libffi.lib (C:\Program Files\vcpkg\installed\x64-windows\lib) export lib
- libffi.dll (C:\Program Files\vcpkg\installed\x64-windows\bin) link dll
- libffi.pdb (C:\Program Files\vcpkg\installed\x64-windows\bin)
1.3 cmake集成
可以通过以下语句集成到其他cmake工程中
find_package(libffi CONFIG REQUIRED)
target_link_libraries(main PRIVATE libffi)
2.通过Github的winlibs编译任意版本
拷贝winlibs的编译工程
git clone https://github/winlibs/libffi
winlibs已经将任何你需要的版本都做成了vs工程,需要哪个版本随意选。
用法很简单了,选择你想编译的版本的工程打开,执行编译,得到静态库。
或者更改配置选项,选择到处成dll
则导出成动态库版本
根据项目选择Debug/Release版
3.通过newlawrence的版本编译3.2.1
git clone https://github/newlawrence/Libffi
cd Libffi
msvcbuild
直接编译成静态库
这个版本CmakeLists不适用于3.3版本,不可直接拷贝到最新版本编译。
4.使用mingw64通过cl.exe编译vs16_x64版本
这一种是libffi作者使用的方法,由于无法还原作者当时的编译环境。根据README.md在mingw环境下尝试了以下步骤:
git clone https://github/libffi/libffi.git
./autogen.sh
./configure CC="../msvcc.sh -m64" CXX="../msvcc.sh -m64" LD=link CPP="cl -nologo -EP" CXXCPP="cl -nologo -EP" CPPFLAGS="-DFFI_BUILDING_DLL" --disable-dependency-tracking
configure成功后,最后报错 “缺少makeinfo”,然后放弃,算是一次失败的尝试吧。