go与c++链接示例
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
go与c++链接示例的更多相关文章
- https soap链接示例
1.先安装soap扩展sudo yum install php-soap 2.安装openssL 3.function issure($sn){//通过soap链接接口 进行确认是否是正确的sn码 ...
- Java下载HTTP URL链接示例
这里以下载迅雷U享版为例. 示例代码: package com.zifeiy.snowflake.handle.filesget; import java.io.File; import java.i ...
- JavaScript实现url地址自动检测并添加URL链接示例代码
写一个简单的聊天系统,发出Htpp的Url实现跳转加上a标签,下面是具体的实现,感兴趣的朋友不要错过 背景:写一个简单的聊天系统,发出Htpp的Url实现跳转加上a标签. 实现代码: 复制代码代码如 ...
- pymysql简单链接示例
#!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/24 import pymysql username = input('username ...
- 原创 C++应用程序在Windows下的编译、链接:第三部分 静态链接(二)
3.5.2动态链接库的创建 3.5.2.1动态链接库的创建流程 动态链接库的创建流程如下图所示: 在系统设计阶段,主要的设计内容包括:类结构的设计以及功能类之间的关系,动态链接库的接口.在动态链接库中 ...
- Excel应该这么玩——6、链接:瞬间转移
上一篇中提到通过命名表格来管理基础数据,这样会让数据更规范.如果有很多个基础数据表,需要查找或者修改其中的一个,可以通过名称框中下拉来定位. 但是当表格较多的时候,通过下拉选择的方式就不是很好定位了. ...
- Markdown使用简单示例
标题示例: 标题一 #标题一 标题二 #标题二 标题三 ###标题三 标题四 ####标题四 标题五 #####标题五 标题六 ######标题六 连接示例 [![License](图片地址)](跳转 ...
- Markdown使用简单示例(每一个使用对应一个实际的markdown语法)
1.标题示例:通过"#"数量表示几级标题.(一共只有1~6级标题,1级标题字体最大) 标题一 #标题一 标题二 #标题二 标题三 ###标题三 标题四 ####标题四 标题五 ## ...
- GSM/GPRS操作示例
A6(GPRS) 博文转自安信科技: http://wiki.ai-thinker.com/gprs/examples 1.电话接收 相关指令 ATDxxxxx;//xxx为电话号码 示例 打电话 ...
随机推荐
- php部分---面向对象:定义、实例化、构造函数、析构函数;
类 − 定义了一件事物的抽象特点.类的定义包含了数据的形式以及对数据的操作. 对象 − 是类的实例.一切皆对象.由类实例化出来的. 成员变量 − 定义在类内部的变量.该变量的值对外是不可见的,但是可以 ...
- leetcode 106 Construct Binary Tree from Inorder and Postorder Traversal----- java
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- HDU 5955 Guessing the Dice Roll
HDU 5955 Guessing the Dice Roll 2016 ACM/ICPC 亚洲区沈阳站 题意 有\(N\le 10\)个人,每个猜一个长度为\(L \le 10\)的由\(1-6\) ...
- STL概述
一.关于STL STL(Standard Template Library,标准模板库)是C++语言标准中的重要组成部分.STL 以模板类和模板函数的形式为程序员提供了各种数据结构和算法的精巧实现,程 ...
- hihoCoder #1078 : 线段树的区间修改
题目大意及分析: 线段树成段更新裸题. 代码如下: # include<iostream> # include<cstdio> # include<cstring> ...
- hdu3072 强连通+最小树形图
题意:有一个人他要把一个消息通知到所有人,已知一些通知关系:A 能通知 B,需要花费 v,而又知道,如果某一个小团体,其中的成员相互都能直接或间接通知到,那么他们之间的消息传递是不需要花费的,现在问这 ...
- Hibernate之:各种主键生成策略与配置详解
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- linux mount (挂载命令)详解
挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式:mount [-t vfstype] [-o option ...
- div下的img标签中图片的大小设定
首先html为: <div class="box1"><img src="images/more-1.jpg"></div> ...
- @Resource注解
原文地址:http://blog.sina.com.cn/s/blog_a795a96f01016if1.html @Resource 注解被用来激活一个命名资源(named resource)的 ...