Qt:从 Golang 导出的共享 C 库

我正在使用 Golang 导出可在 C 中使用的共享库进行一些测试,并得出以下结论:


calcLib.go:


package main

import "C"


//export Calculator

func Calculator(x int, y int) int {

    return x+y;

}


func main() {

    // Need a main function to make CGO compile package as C shared library

}

这个简单的库包含对Calculator数字求和的。现在我有一个小的 C 程序将使用它:


计算.c:


#include "calcLib.h"


int main() {     

    printf("Hello World from C!\n");     

    printf("Calculator() -> %d\n", Calculator(10,5));

    return 0;

}


现在我可以编译库和 C 程序:


C:\Users\TCB13\Desktop

> go build -buildmode c-shared -o calcLib.a calcLib.go

C:\Users\TCB13\Desktop

> gcc -o calc.exe calc.c calcLib.a

这将输出一个按预期工作的可执行文件:


> .\calc.exe

Hello World from C!

Calculator() -> 15

现在,如何在 Qt 项目中使用这个共享库?


我尝试将以下内容添加到我的 .pro 文件中:


LIBS += -L"C:\Users\TCB13\shared\calcLib.a"

INCLUDEPATH += "C:\Users\TCB13\shared"  # Shared folder includes the calcLib.h file

然后在我的 main.cpp 中:


#include "testapp.h"


#include <QApplication>

#include <QtDebug>

#include "calcLib.h"


int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    TestApp w;

    w.show();


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


    return a.exec();

}

编译它会导致以下错误:

http://img2.mukewang.com/634d0d00000102c502750105.jpg

如何在 Qt 应用程序中正确制作/导出/使用这个库?

这是我的 calcLib.h 文件供参考:https ://pastebin.com/k3sKYiti

谢谢你。


心有法竹
浏览 197回答 1
1回答

至尊宝的传说

在 qmake 项目文件LIBS中,变量使用与 gcc 链接器相同的 cli 键-L来指定库和-l库名称的搜索路径(不带lib前缀和不带.a或.dll或.so后缀,我相信带前缀的版本也应该有效)。所以应该是LIBS += -L$${PWD}\shared -lCalcqmake 变量参考
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go