go 環境搭建 以及 linux 下go環境交叉編輯鏈(arm)的搭建,error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]


1,下載

Golang官網下載地址:https://golang.google.cn/dl/

 

2,解壓到指定目錄

 

3,運行go 

獲取環境變量修改方法

go help env
usage: go env [-json] [-u] [-w] [var ...]

Env prints Go environment information.

By default env prints information as a shell script
(on Windows, a batch file). If one or more variable
names is given as arguments, env prints the value of
each named variable on its own line.

The -json flag prints the environment in JSON format
instead of as a shell script.

The -u flag requires one or more arguments and unsets
the default setting for the named environment variables,
if one has been set with 'go env -w'.

The -w flag requires one or more arguments of the
form NAME=VALUE and changes the default settings
of the named environment variables to the given values.

For more about environment variables, see 'go help environment'.

 

windows現在環境變量

C:\Users\Administrator>go env
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Go\networkpkg;
set GOPRIVATE=
set GOPROXY=https://goproxy.io,direct
set GOROOT=c:\go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=c:\go\pkg\tool\windows_amd64
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build644129466=/tmp/go-build -gno-record-gcc-switches

C:\Users\Administrator>

linux 現在環境變量

root@ubuntu:~# go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/root/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn/"
GOROOT="/home/goenv/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/goenv/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build869956040=/tmp/go-build -gno-record-gcc-switches"
root@ubuntu:~# 

 設置/etc/profile環境變量

設置GOPATH環境變量

修改/etc/profile系統環境變量文件,寫入GOPATH信息以及go sdk路徑
#for go env

export GOROOT=/home/goenv/go
export PATH=$PATH:$GOROOT/bin

讀取/etc/profile,立即生效

source /etc/profile     #讀取環境變量

  

 修改方法

go env -w GOPROXY=https://goproxy.cn/
go env -w GO111MODULE=on

  

想在linux 同時設置 x64,x86的環境失敗了.(當年是失敗了,現在被b成功了.請看最下面說明 )

GOCACHE="/root/.cache/go-build" GOENV="/root/.config/go/env"

GOROOT="/home/goenv/go"
會同時修改.只有用2台機器來配置環境變量

 

安裝mingw ,gcc

安裝mingw,想用g++\gcc編譯器。

網上很多教程都是指引下載安裝器的,但是下載后在線安裝時卻都出現下載的錯誤,所以無法安裝成功。

參考mingw貼吧:https://tieba.baidu.com/p/5487544851?red_tag=1967781305

可以到頁面:https://sourceforge.net/projects/mingw-w64/files/?source=navbar 下載離線安裝包

 

go 交叉編譯 arm 32 的程序

由於項目原因,需要把go的程序編譯成so,供C使用.無奈板子空間小,運行慢.

被bi de 需要用交叉編譯鏈,以前都沒有弄對,這次整對了.

#拷貝下面的話到linux中執行.
#指定gcc程序目錄 
export PATH=$PATH:/opt/poky/1.7/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/


export PATH=$PATH:$GOROOT/bin
export GOPROXY="https://goproxy.io,direct"
export CGO_ENABLED=1
export GO111MODULE=on
export GOROOT=/home/goenv/go


# 這些是修改 編譯架構,x86,x64 , gcc  ,gcc FLAGS
export GOARCH=arm
export GOHOSTARCH=386
export CGO_CFLAGS="-g -O2  "
export CGO_CPPFLAGS=" "
export CGO_CXXFLAGS="-g -O2  "
export CGO_FFLAGS="-g -O2  "
export CGO_LDFLAGS="-g -O2  "
export PKG_CONFIG="pkg-config"
export GOGCCFLAGS=" -fPIC -marm -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build964815022=/tmp/go-build -gno-record-gcc-switches"


export AR="arm-poky-linux-gnueabi-gcc-ar"
export CC="arm-poky-linux-gnueabi-gcc"
export CXX="arm-poky-linux-gnueabi-g++"

 

#拷貝下面的話到linux中執行.
#指定gcc程序目錄 
export PATH=$PATH:/opt/poky/1.7/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/


export PATH=$PATH:$GOROOT/bin
export GOPROXY="https://goproxy.io,direct"
export CGO_ENABLED=1
export GO111MODULE=on
export GOROOT=/home/goenv/go


# 這些是修改 編譯架構,x86,x64 , gcc  ,gcc FLAGS
export GOARCH=arm
export GOHOSTARCH=386
export CGO_CFLAGS="-g -O2 -mfloat-abi=hard"
export CGO_CPPFLAGS="-mfloat-abi=hard"
export CGO_CXXFLAGS="-g -O2 -mfloat-abi=hard"
export CGO_FFLAGS="-g -O2 -mfloat-abi=hard"
export CGO_LDFLAGS="-g -O2 -mfloat-abi=hard"
export PKG_CONFIG="pkg-config"
export GOGCCFLAGS="-mfloat-abi=hard -fPIC -marm -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build964815022=/tmp/go-build -gno-record-gcc-switches"


export AR="arm-poky-linux-gnueabi-gcc-ar"
export CC="arm-poky-linux-gnueabi-gcc"
export CXX="arm-poky-linux-gnueabi-g++"

 

export GOARCH=arm

使用go build編譯的程序即可在arm平台運行

切換回linux平台

export GOARCH=amd64

然后執行自己需要的go編譯命令就可以了

go build -o /xxx.exe /run.go #生成exe

go build -ldflags xxxxxxxxx #生成so

 

go 交叉編譯 arm 64 的程序

export PATH=$PATH:/home/armgcc/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/

export GOROOT=/home/go/
export PATH=$PATH:$GOROOT/bin
export GOPROXY="https://goproxy.io,direct"
export CGO_ENABLED=1
export GO111MODULE=on



# 這些是修改 編譯架構,x86,x64 , gcc  ,gcc FLAGS  amd64 arm64
export GOOS=linux
export GOARCH=arm64
export GOHOSTARCH=arm64
export GOFLAGS=" "
export CGO_CFLAGS="-g -O2    "
export CGO_CPPFLAGS="       "
export CGO_CXXFLAGS="-g -O2     "
export CGO_FFLAGS="-g -O2     "
export CGO_LDFLAGS="-g -O2    "
export PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build504536815=/tmp/go-build -gno-record-gcc-switches"


export AR="aarch64-linux-gnu-gcc-ar"
export CC="aarch64-linux-gnu-gcc"
export CXX="aarch64-linux-gnu-g++"

 

當時

export CC="aarch64-linux-gnu-gcc" 寫成了
export CC="aarch64-linux-gnu-g++"
導致編譯出錯
error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]
其實是應該用gcc編譯的用的g++ ,,,wo cao,cao
我正在嘗試用g ++編譯一些c代碼(是的,故意的)。我收到的錯誤就像(例如):

error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]
在編譯選項中添加-fpermissive讓我:

error: invalid conversion from 'void*' to 'unsigned char*' [-Werror=permissive]
由於-Werror似乎是錯誤,但是添加-Wno-error=permissive -Wno-permissive導致:

error: -Werror=permissive: no option -Wpermissive
error: unrecognized command line option "-Wno-permissive" [-Werror]
如何禁用從void *到其他指針類型的轉換警告(全局)?

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM