cgo c++-go调用c++ so问题 cgo

问题描述

go调用c++ so问题 cgo

test.go
package main

/*
#include "load_so.h"
#cgo LDFLAGS: -L ./ -lload_so
*/
import "C"
import "fmt"

func main() {
fmt.Println("20*30=", C.do_test_so_func(20, 30))
fmt.Println("20+30=", C.dd_test_so_func(20,30))

}

load_so.c
#include "load_so.h"
#include "dlfcn.h"

int do_test_so_func(int a,int b)
{
void* handle;
typedef int (*FPTR)(int,int);

handle = dlopen("./test_so.so", 1);
FPTR fptr = (FPTR)dlsym(handle, "test_so_func");

int result = (*fptr)(a,b);
return result;

}

int dd_test_so_func(int a,int b)
{
void* handle;
typedef int (*FPTR)(int,int);

handle = dlopen("./test_so.so", 1);
FPTR fptr = (FPTR)dlsym(handle, "dd_so_func");

int result = (*fptr)(a,b);
return result;

}

test_so.c
#include "test_so.h"

int test_so_func(int a,int b)
{
return a*b;
}

int dd_so_func(int a,int b){
return a+b;
}

gcc -shared ./test_so.c -o test_so.so

gcc -o libload_so.so -O2 -fPIC -shared load_so.c -ldl

gcc 可以通过
g++不能通过
请有过go 调用c++ so的经验

解决方案

http://blog.csdn.net/newjueqi/article/details/32131521

解决方案二:

Why C++ Programmers Aren't Moving to Go
C++编写的SO 并被调用过程
Linux下C++ Eclipse调用so文件

解决方案三:

go不太支持c++,它的cgo主要是支持c语言的库文件

时间: 2024-10-31 02:01:42

cgo c++-go调用c++ so问题 cgo的相关文章

Golang中的cgo调用 mysql 库的例子

Golang 中关于 cgo 的文档比较少,所以我绝对写个简单的案例,这里用 Mysql 做案例,一种是调用C里边的函数,一种是完全用 golang 来点用 mysql 库函数.我的环境是 MAC ,如果测试的话,请 LDFLAGS 对应自己的环境编写. 注意的地方 Golang 的 cgo 引用必须单独一行,也就是说必须如下写法 import "C" cgo 中 没有 C.NULL 类型 ,所以你要使用 nil package main /* #include <stdio.h

传参-这个go语言封装c函数,使用cgo,参数怎么传?

问题描述 这个go语言封装c函数,使用cgo,参数怎么传? 需要用go语言把下列的c函数封装一下,c的函数如下: int raw_to_span(OPResult result, int *num, int **time, short **status, double **value); 下面是我的写法,不正确,编译不通过: func RawToSpan(result uintptr) (num int, time []int, status []int16, value []float64,

用Go语言写Android应用 (2) - 从Android的Java调用Go代码

用Go语言写Android应用 (2) - 从Android的Java调用Go代码 上一篇我们讲到,Go在Android中的作用,就相当于NDK中的C/C++.上节我们学习了参照NDK的方式用纯Go语言来写应用. 但是,也正如在Android中,C/C++主要是通过JNI的方式被Java代码调用,本节我们就学习如何使用Java代码来调用Go代码. Java调Go的JNI例子 Java部分 我们首先来看这个简单得不能再简单的Java部分的代码,只有一个TextView,然后调用Go写的Hello.

Golang调用Python

Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言.Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法. 原理 Python提供了丰富的C-API.而C和Go又可以通过cgo无缝集成.所以,直接通过Golang调用libpython,就可以实现Go调Python的功能了.确实没啥神奇,只要会用C调Python,马上就知道怎么用了.但问题是,如果有的选择,这个年代还有多少人愿意去裸写C和C++

如何把Go调用C的性能提升10倍?

目前,当Go需要和C/C++代码集成的时候,大家最先想到的肯定是CGO.毕竟是官方的解决方案,而且简单. 但是CGO是非常慢的.因为CGO其实一个桥接器,通过自动生成代码,CGO在保留了C/C++运行时的情况下,搭建了一个桥来沟通C/C++世界和Go的世界.这就意味着,兼容性很好,但是对C的函数的调用,必须先把当前的goroutine挂起,并切换执行栈到当前的线程M的主栈(大小2MB).如果不做这个操作,那么只能在goroutine的栈上执行C函数调用,可是,goroutine的栈一般都很小,很

centos6使用 swig3.0.6 编译c,golang 1.4.2调用

1,关于swig SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具.SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP. 最新的版本已经开始支持golang了. 2,环境搭建 参考文档: http://www.swig.org/Doc3.0/Go.html 首先安装swig http://www.swig.org/download.html tar -zxvf swig-3.0

Windows 8应用开发之异步调用

 不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使得比较复杂的逻辑操作由异步进行,用户仍然可以继续使用应用,不会有无响应的等待情况出现. 本篇将通过一个简单的实例演示如何在Windows 8 应用中使用异步编程.首先我们来编写一个"Get Blogs"按钮,点击它可以从Windows Blog中获取博客列表.当然获取博客信息的过程是由异步进行的,这个过程中为了测试用户仍然可以与应用交互,我们再

C++ Builder调用Matlab

Borland C++Builder是一种新颖的可视化编程语言.在工程应用中,我们一般用C++Builder语言编写应用程序,实现交互界面.数据采集和端口操作等,但C++Builder在数值处理分析和算法工具等方面,其效率远远低于Matlab语言.在准确方便地绘制数据图形方面,Matlab语言更具有无可比拟的优势.此外,Matlab还提供功能强大的工具箱.但Matlab的缺点是不能实现端口操作和实时控制.因此,若能将两者结合运用,实现优势互补,将获得极大的效益. 本文结合实际介绍了应用Borla

javaweb-网页调用ocx控件打开或创建注册表的权限问题

问题描述 网页调用ocx控件打开或创建注册表的权限问题 在某几个win7 64位笔记本上, 通过服务器页面调用ocx读取注册表会提示无权限的现象,但使用本地html文件调用没问题, 不知是何原因,求大侠给点提示 解决方案 又试了一下,使用世界之窗浏览器可以正常使用了.但不明白为何? 解决方案二: ie本地file协议浏览(intranet)和http访问(internet)使用的是不同的安全设置,你按照本地的intranet安全配置internet安全设置 不过你这种需求没什么意义,只能针对特殊