大家都知道Golang可以调用C语言,也可以调用C++语言,网上很多文章都是混在一起介绍的,其实二者有很大的区别。今天们先来了解Golang调用C++语言的方法和技巧。
新建一个代码工程,创建如下代码文件。
-project
--add.h
--add.cpp
--main.go
--mod.go
--libadd.so
首先,定义C语言程序的头文件 add.h。
// add.h
#ifndef ADD_H
#define ADD_H
void SayHello();
#endif
然后,定义C语言程序的源文件 add.cpp。
// add.cpp
#include <iostream>
extern "C" {
void SayHello() {
std::cout << "Hello from C++!" << std::endl;
}
}
最后,我们定义 Golang 语言的入口文件 main.go。熟悉的小伙伴都知道,main.go文件在 Golang 工程中扮演着重要角色。在 Golang 工程中,一个可执行程序必须包含一个名为 main 的包和一个名为 main 的函数。main.go 文件也是程序的入口文件。
package main
/*
#cgo CXXFLAGS: -I.
#cgo LDFLAGS: -L. -ladd
#include "add.h"
*/
import "C"
import "fmt"
func main() {
fmt.Println("start...")
C.SayHello() // 调用 C++ 函数
fmt.Println("end...")
}
go.mod 文件在 Golang 工程中也扮演着重要角色,它是 Golang 工程中的模块管理文件,用于定义和管理 Golang 项目的模块依赖。它是也 Go Modules 系统的核心部分,文件记录了项目所依赖的所有模块及其版本信息。
module add
go 1.23.4
工程初始化:
go mod init add
go mod tidy
和C语言不一样,编译动态库的命令如下:
g++ -shared -o libadd.so -fPIC add.cpp
编译可执行程序:
go build
和C语言不一样,也可以直接执行go run main.go运行。
输出结果:
start...
Hello from C++!
end...
无论是调用 C 还是 C++,Golang 都通过 cgo 实现跨语言调用。cgo 是 Golang 提供的一种专属机制,允许 Golang 代码直接调用 C 或 C++ 代码。
在 Go 文件中,通过注释块引入 C 或 C++ 的头文件。例如:
/*
#include <stdio.h> // C 头文件
#include "header.h" // C++ 头文件
*/
import "C"
在 Go 中调用 C 或 C++ 函数时,都需要使用 C. 前缀。例如:
result := C.my_function() // 调用 C 或 C++ 函数
Go 和 C/C++ 之间的数据类型需要手动转换。例如:
总的来说,虽然调用 C 和 C++ 程序在 Go 中有很多相似之处,但由于 C++ 的复杂性和特性,调用 C++ 程序可能需要更多的注意和处理。至此,通过两篇文章我们分别介绍了Golang调用C语言和C++语言程序的使用方法。希望可以帮到有需要的小伙伴。最后补充一句:新年快乐,蛇年大吉!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。