• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go与c++链接示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

go lang与c/c++的链接示例:

foo.hpp

//foo.hpp
#ifndef _FOO_HPP_
#define _FOO_HPP_

template<typename T>
T add(const T& lhs,const T& rhs)
{
	return lhs+rhs;
}

void display();

#endif //_FOO_HPP_

foo.cpp

//foo.cpp
#include "foo.hpp"
#include <iostream>

void display()
{
	std::cout<<"this message is from foo.cpp -display"<<std::endl;
}

foo_wrap.h

//foo_wrap.h
#ifndef _FOO_WRAP_H_
#define _FOO_WRAP_H_

#ifdef __cplusplus
extern "C" {
#endif

//add function family
int add_int_wrap(int lhs,int rhs);
float add_float_wrap(float lhs,float rhs);

//display some message
void display_wrap();

#ifdef __cplusplus
}
#endif
#endif //_FOO_WRAP_H_

foo_wrap.cpp

//foo_wrap.cpp
#include "foo_wrap.h"
#include "foo.hpp"

//add function family
int add_int_wrap(int lhs,int rhs)
{
	return add<int>(lhs,rhs);
}
float add_float_wrap(float lhs,float rhs)
{
	return add<float>(lhs,rhs);
}

//display
void display_wrap()
{
	return display();
}

foo.go

//foo.go
package main

// #cgo CFLAGS: -I./ 
// #cgo LDFLAGS: -L./ libfoo.a -lstdc++
// #include "foo_wrap.h"
import "C"
import "fmt"

func main() {
	//test add family
	//int
	var a,b int32 = 1,2
	rsi := C.add_int_wrap(C.int(a),C.int(b))
	fmt.Printf("C.add_int_wrap(%d,%d)=%d\n",a,b,rsi)
	//float
	var c,d float32 = 1.3,2.5
	rsf := C.add_float_wrap(C.float(c),C.float(d))
	fmt.Printf("C.add_int_wrap(%f,%f)=%f\n",c,d,rsf)
	
	//display
	fmt.Println("message from C:")
	C.display_wrap()
}

编译脚本build.sh:

#!/bin/sh
#build c/c++ source code g++ -c foo.cpp g++ -c foo_wrap.cpp ar rcs libfoo.a foo.o foo_wrap.o #build go source code go build foo.go ./foo

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
gomod模式下如何使用本地项目中的包发布时间:2022-07-10
下一篇:
go中指针发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap