Я пытаюсь создать проект go, который использует стороннюю библиотеку (GDAL), написанную на C и C ++. Я столкнулся с этой ошибкой:
In file included from contour.cpp:31:0:
cpl_port.h:187:6: error: #error Must have C++11 or newer.
# error Must have C++11 or newer.
^
In file included from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/type_traits:35:0,
from cpl_conv.h:372,
from contour.cpp:39:
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^
Некоторые поиски говорят мне, что это ожидается, и исправить это просто установить флаг на компиляторе (не связаны, но все еще уместны).
Я прочитал документация go при сборке, и хотя он предполагает, что можно указывать опции для отдельных компиляторов, он не дает четкого объяснения того, как и какие-либо примеры.
Я попробовал следующее, только угадывая, и хотя команда go build принимает их, они выдают ту же ошибку, поэтому они не работают.
go build -gcflags -std=gnu++11 -ldflags -std=gnu++11
go build -gcflags -std=c++11 -ldflags -std=c++11
go build -gcflags -std=c++11
go build -gcflags -std=all=gnu++11 -ldflags -std=all=gnu++11
Как я могу сказать, пойти и сказать GCC для компиляции с C ++ 11 или новее?
Изменить: по запросу PeterSO:
H:\>go version
go version go1.10.2 windows/amd64
H:\>go env
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\ksexton\AppData\Local\go-build
set GOEXE=.exe
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=H:\ksexton\Go;
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
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\ksexton\AppData\Local\Temp\go-build937852322=/tmp/go-build -gno-record-gcc-switches
H:\>gcc --version
gcc (tdm64-1) 5.1.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
H:\>g++ --version
g++ (tdm64-1) 5.1.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Использование cgo с командой go
Все директивы cgo CPPFLAGS и CFLAGS в пакете:
объединены и используются для компиляции файлов C в этом пакете. Все
Директивы CPPFLAGS и CXXFLAGS в пакете объединяются и
используется для компиляции файлов C ++ в этом пакете. Все CPPFLAGS и FFLAGS
директивы в пакете объединяются и используются для компиляции Фортрана
файлы в этом пакете. Все директивы LDFLAGS в любом пакете в
программа объединяется и используется во время соединения. Все pkg-config
директивы объединяются и отправляются в pkg-config одновременно
добавьте к каждому соответствующему набору флагов командной строки.
В Windows:
set CGO_CXXFLAGS=-std=c++11
Других решений пока нет …