You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qt项目中正确使用Golang导出的C共享库

步骤1:修正Go共享库的编译选项

首先根据你的链接需求选择对应编译指令:

  • 静态链接(最终Qt程序无需附带额外dll):
go build -buildmode c-archive -o calcLib.a calcLib.go
  • 动态链接(生成独立dll):
go build -buildmode c-shared -o calcLib.dll calcLib.go

编译完成后将生成的calcLib.a(静态库或动态库的导入库)、calcLib.h、动态编译场景下的calcLib.dll统一放到C:\Users\TCB13\shared目录下。

步骤2:修正C++头文件引入逻辑

calcLib.h是C语言风格的头文件,C++直接引入会触发函数名修饰逻辑导致找不到符号,需要用extern "C"包裹引入部分,修改main.cpp代码:

#include "testapp.h"

#include <QApplication>
#include <QtDebug>

// 用extern "C"包裹C头文件引入,避免C++名字修饰
extern "C" {
#include "calcLib.h"
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    TestApp w;
    w.show();

    qDebug() << Calculator(10,5);

    return a.exec();
}

步骤3:修正Qt .pro文件配置

你之前的LIBS语法存在错误:-L参数仅用于指定库搜索目录,-l才用于指定要链接的库名,同时静态链接Go库需要额外引入Go runtime依赖的Windows系统库:

INCLUDEPATH += "C:\Users\TCB13\shared"

# 静态链接版本配置
LIBS += -L"C:\Users\TCB13\shared" \
        -lcalcLib \
        -lws2_32 \
        -lwinmm \
        -luserenv

# 动态链接版本仅需保留下面两行即可,无需引入系统库
# LIBS += -L"C:\Users\TCB13\shared" \
#         -lcalcLib
# 动态链接需要将calcLib.dll放到Qt编译输出的exe同目录下才能正常运行

额外注意事项

  • 保证Go编译的库架构和Qt使用的编译器架构一致:比如Go编译的是64位架构,Qt也要使用64位的MinGW或MSVC编译器,32位同理,否则会出现链接不兼容问题。
  • 如果使用MSVC编译器编译Qt项目,Go默认生成的.a库是MinGW格式无法直接识别,推荐使用动态编译的dll,配合MSVC的lib工具生成对应导入库即可正常链接。

内容的提问来源于stack exchange,提问作者TCB13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:15:03