cgo不包含CXXFLAGS

时间:2018-06-25 18:46:01

标签: c++11 go cgo

我想在Golang中调用C代码:

// #cgo CFLAGS: -I/usr/include/c++/8.1.1/bits
// #cgo CXXFLAGS: -std=gnu++11
// #include "c++0x_warning.h"
import "C"

但出现错误:

In file included from ./main.go:5:
/usr/include/c++/8.1.1/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

因此cgo不使用CXXFLAGS。我尝试了-std=c++11,但也没有用。我做错了什么?

$ go version
go version go1.10.3 linux/amd64

1 个答案:

答案 0 :(得分:1)

请参考以下SO问题:Difference between CPPFLAGS and CXXFLAGS in GNU Make,以确定您在程序上下文中真正需要的标志。

如果您要调用纯C代码(而不是C ++代码),我认为您不需要CXX_FLAGS

  

CPPFLAGS应该是C预处理器的标志; CXXFLAGS是C ++编译器的标志。

您可能还需要检查go env。如果确实需要此标志,则可以尝试使用env CGO_CXXFLAGS="-std=c++11" go build <YOUR_CODE>编译程序。