C++与Go系列之编译篇
Linux系统下自带C++编译工具g++,而Go的编译工具需要安装。
写在前面
1.Ubuntu安装最新版本的稳定版 golang-go 可以通过 snap
sudo snap install go --classic
如果snap不存在,通过以下命令安装进行按照:sudo apt install snapd
如果要查看snap支持安装的版本:snap info go
2.Ubuntu安装最新版本的golang-go也可以通过PPA,需要先添加PPA源
sudo add-apt-repository ppa:longsleep/golang-backports
然后执行安装命令
sudo apt-get install golang-go
如果要安装指定版本sudo apt-get install golang-1.11-go
如果add-apt-repository不存在,通过以下命令安装进行按照:sudo apt-get install software-properties-common
如果要查看支持安装的版本:apt-cache madison golang-go
3.一般安装完go后还需要设置模块包代理地址:
go env -w GOPROXY=https://goproxy.cn,direct
查看是否设置成功:
go env | grep GOPROXY
源文件编写
.cpp
、.h
、.hpp
等扩展名保存。预处理(Preprocessing)
#include
、#define
)在这一阶段处理。编译(Compilation)
.s
)。汇编(Assembly)
.o
或.obj
)。链接(Linking)
构建系统
源文件编写
.go
扩展名保存。导入包(Importing Packages)
import
语句用于导入标准库或第三方库。编译(Compilation)
链接(Linking)
构建工具
go build
、go install
、go run
。go build
:编译包及其依赖项,但不安装结果。go install
:编译并安装包。go run
:编译并运行Go程序。C++ 构建示例
cpp// main.cpp
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
bashg++ -o hello main.cpp ./hello
Go 构建示例
go// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
bashgo build -o hello main.go ./hello
编译后的文件比对(编译器版本不同可能编译出来的大小不一样),其hello_cpp采用动态链接libstdc++.so:
root@ubuntu:~/cpp-go# ls -alh total 1.9M drwxr-xr-x 2 root root 4.0K Jul 21 10:19 . drwxr-xr-x 6 root root 4.0K Jul 20 23:07 .. -rwxr-xr-x 1 root root 9.7K Jul 20 23:08 hello_cpp -rw-r--r-- 1 root root 97 Jul 20 23:07 hello_cpp.cpp -rwxr-xr-x 1 root root 1.9M Jul 21 10:19 hello_go -rw-r--r-- 1 root root 77 Jul 20 23:07 hello_go.go
交叉编译(Cross-compilation)是指在一种平台上编译生成可在另一种平台上运行的二进制文件的过程。也就是说,在Linux上编译生成Windows的程序,或者在x86_64架构的Linux上编译生成适用于ARM64架构的Linux程序,都是要通过交叉编译。
C++交叉编译通常需要特定的工具链,例如gcc
、g++
的交叉编译版本。常见的工具链有:
arm-linux-gnueabi-g++
:用于ARM架构的Linux系统。x86_64-w64-mingw32-g++
:用于64位的Windows系统。basharm-linux-gnueabi-g++ -o hello_arm main.cpp
如果还没有安装ARM交叉编译工具链,可以使用以下命令进行安装:
bashsudo apt-get install g++-arm-linux-gnueabi
bashx86_64-w64-mingw32-g++ -o hello_windows.exe main.cpp
如果还没有安装Windows交叉编译工具链,可以使用以下命令进行安装:
bashsudo apt-get install g++-mingw-w64
Go语言的交叉编译比C++要简单得多,因为Go编译器本身就支持多平台交叉编译。
在Go中进行交叉编译,只需设置几个环境变量:
GOOS
:目标操作系统,如linux
、windows
、darwin
。GOARCH
:目标架构,如amd64
、arm
、386
。bashGOOS=windows GOARCH=amd64 go build -o hello_windows.exe main.go
bashGOOS=linux GOARCH=arm go build -o hello_arm main.go
工具链
arm-linux-gnueabi-g++
、x86_64-w64-mingw32-g++
。GOOS
和GOARCH
。编译命令
配置简易性
本文作者:phae
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!