在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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 |
请发表评论