2025-02-28 编译32位的C和go程序

pacman -S mingw-w64-i686-toolchain

然后到C:\msys64\mingw32.exe 双击运行。编译出来就是32位的。

Go语言的程序要编译成32位的比较简单只要设置环境变量set GOARCH=386

为什么需要32位的?因为要发送LVM_GETITEM消息给32位程序参考。测试发现如果用64位的发送,不但获取不到信息,而且目标进程会直接闪退。32位对32位就没事。

想在vs code里面编译,需要写这样一个tasks.json文件

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build C Program",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-m32",
                "-shared",
                "-o",
                "\"${fileDirname}\\${fileBasenameNoExtension}.dll\"",
                "\"${file}\"",
                "-lcomctl32"
            ],
            "options": {
                "env": {
                    "MINGW_PACKAGE_PREFIX": "mingw-w64-i686",
                    "MINGW_PREFIX": "/mingw32",
                    "PATH": "C:/msys64/mingw32/bin;${env:PATH}"
                }
            },
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ],


}

然后进到 .c 文件中,键盘 ctrl + ` 打开命令行窗口。按ctrl+shift+B运行构建任务。

不幸的是它似乎不支持中文路径。整个项目必须放到英文路径下。

所以,如果必须保持中文路径,那只能改用相对路径。

REM Build listview reader dll
set MINGW_PACKAGE_PREFIX=mingw-w64-i686
set MINGW_PREFIX=/mingw32
set PATH=PATH;C:\msys64\mingw32\bin
gcc -m32 -shared -o ./bin/abc.dll ./dll/abc.c -lcomctl32
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容