首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何静态地将golang的.a库与C++项目链接?

如何静态地将golang的.a库与C++项目链接?
EN

Stack Overflow用户
提问于 2017-10-27 10:57:01
回答 1查看 1.7K关注 0票数 1

Golang有很多有用的库,但是我需要支持我的C++应用程序,不能用Golang重写它(它太大了)。

因此,我试图通过静态链接从我的C++应用程序中使用Go的库(C++文件)。

首先,我创建了一个简单的库(Golang):

代码语言:javascript
运行
复制
    package math_core
    func Sum(a, b int) int {
        return a + b
    }

通过以下命令构建了此代码(在此项目的根文件夹中):

代码语言:javascript
运行
复制
    SET GOOS=windows
    SET GOARCH=386
    go build
    go install

(结果我得到了libmath.core.a库)

之后,我创建了一个简单的应用程序,它将使用这个库(C++):

代码语言:javascript
运行
复制
    #include <iostream>
    extern int Sum(int a, int b);
    int main() {
        std::cout << Sum(5, 7) << std::endl;
        return 0;
    }

我在网上找到了的文章:

但这帮不了我。

我使用以下软件

  • Windows 10 x64
  • 供C/C++开发人员使用的Eclipse (Neon.3版本4.6.3)
  • GCC版本4.8.1 20130324 (预发行版)(rubenvb-4.8-std线程)
  • Gogland 1.0 EAP (Build #GO-173.3415.23)
  • JRE 1.8.0_152-版本-1024-B6 amd64
  • Go 1.9.2 windows/amd64 64

Z:\\MyProjects\\Math.Console\\文件夹的内容:

我试图使用以下命令将libmath.core.a库与math.console应用程序静态链接

代码语言:javascript
运行
复制
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp" 
    g++ "-LZ:\\MyProjects\\Math.Console" -o Math.Console.exe main.o -lmath.core

但是我得到了这个输出

代码语言:javascript
运行
复制
`Z:\MyProjects\Math.Console/libmath.core.a: could not read symbols: Archive has no index; run ranlib to add one

此外,我还试图从库libmath.core.a中提取libmath.core.a

代码语言:javascript
运行
复制
    ar -xo libmath.core.a

我得到了以下文件:

代码语言:javascript
运行
复制
    __.PKGDEF
    _go_.o
    main.o

当我试图通过nm查看它的内容时,我得到了以下内容:

代码语言:javascript
运行
复制
    nm: __.PKGDEF: File format not recognized
    nm: _go_.o: File format not recognized

对于来自main.o库的libmath.core.a文件,我得到了以下内容:

代码语言:javascript
运行
复制
00000000 b .bss
00000000 d .ctors
00000000 d .data
00000000 N .debug_abbrev
00000000 N .debug_aranges
00000000 N .debug_info
00000000 N .debug_line
00000000 N .debug_macro
00000000 N .debug_str
00000000 r .eh_frame
00000000 r .rdata$zzz
00000000 t .text
         U ___main
00000058 t ___tcf_0
00000097 t __GLOBAL__sub_I_main
         U __Z3Sumii
0000006a t __Z41__static_initialization_and_destruction_0ii
         U __ZNSolsEi
         U __ZNSolsEPFRSoS_E
         U __ZNSt8ios_base4InitC1Ev
         U __ZNSt8ios_base4InitD1Ev
         U __ZSt4cout
         U __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
00000000 b __ZStL8__ioinit
         U _atexit
00000000 T _main

但我不明白如何使用C++项目中的Golang库。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-01-15 18:25:45

我认为您需要将导出的函数放在main包中。

另外,我认为您需要在该文件中有一个空的主函数。

func main() {}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46973463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档