【发布时间】:2020-07-19 07:15:12
【问题描述】:
Linux Debian Buster
go 版本 go1.11.6 linux/amd64
gcc 版本 8.3.0 (Debian 8.3.0-6)
libmylib.go
package main
import "C"
import (
"fmt"
)
func say(text string) {
fmt.Println(text)
}
func main(){}
mylib.h
#ifndef MY_LIB_H
#define MY_LIB_H
#include <string>
void say(std::string text);
#endif
main.cpp
#include <string>
#include "mylib.h"
using namespace std;
int main() {
string text = "Hello, world!";
say(text);
return 0;
}
CGO_ENABLED=1 go build -o libmylib.so -buildmode=c-shared libmylib.go
g++ -L/path/to/lib/ -lmylib main.cpp -o my-test-program
/usr/bin/ld: /tmp/ccu4fXFB.o: 在函数'main'中: main.cpp:(.text+0x53): undefined reference to `say(std::__cxx11::basic_string
)'
collect2: error: ld returned 1 exit状态
有变化:package main -> package mylib
CGO_ENABLED=1 go build -o libmylib.so -buildmode=c-shared libmylib.go
-buildmode=c-shared 只需要一个主包
【问题讨论】:
-
从 go 程序调用 C++ 代码可能要简单得多。您是否可以根据这种情况调整实际代码?
-
我需要在我的 C++ 项目中使用 Go 文件中的一些函数。因为我不懂 Go,因此无法翻译 Go -> C++
-
请不要评论你的问题,但edit它提供一些minimal reproducible example
标签: c++ go shared-objects object-files