我可以在cgo中使用c ++吗?

时间:2012-07-10 04:52:03

标签: c++ go cgo

是否可以在cgo中混合一些C ++代码?

我试过了:

package main
/* 
    #include <iostream>

    extern "C" void test(const char* str)
    {
        std::cout << str;
    }
*/
// #cgo CFLAGS: -x c++
// #cgo LDFLAGS: -lstdc++
import "C"

func main() {
    C.test(C.CString("Testing!!!"))
}

但是我得到了这些错误:

error: 'char* CString(_GoString_)' cannot appear in a constant-exp
error: 'void test(const char*)' cannot appear in a constant-expres
error: invalid conversion from 'char* (*)(_GoString_)' to 'long long int' [-fpermissive]
error: invalid conversion from 'void (*)(const char*)' to 'long long int' [-fpermissive]

我正在使用go1.0.2和MinGW-w64 4.7.1

1 个答案:

答案 0 :(得分:10)

@ephemient在Go bug跟踪器中提供了此功能请求的链接。这反过来在Stack Overflow上提供了一个返回How to use C++ in Go?的链接。那里有一个很好的讨论,但对我来说的好处是:

  1. Go常见问题解答(Do Go programs link with C/C++ programs?)的链接:

      

    ... cgo程序提供了“外部函数接口”的机制,允许从Go代码安全地调用C库。 SWIG将此功能扩展到C ++库。

  2. 指向The SWIG documentation for Go

  3. 的链接
相关问题