首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CGo没有在同一个目录中编译C文件

CGo没有在同一个目录中编译C文件
EN

Stack Overflow用户
提问于 2018-03-29 12:31:23
回答 1查看 2.2K关注 0票数 0

我正试图在同一个目录中创建一个具有单独C源文件的CGO程序。正如官方Cgo文档中提到的,Cgo将编译同一个目录中的所有C文件,但在本例中,它不是编译C文件。然后给出一个链接器错误。

myTest.go

代码语言:javascript
复制
package main

/*

#include <stdlib.h>
#include "myTest.h"

*/
import "C"
import "unsafe"

func Print(s string) {
    cs := C.CString(s)
    C.print_str(cs)
    C.free(unsafe.Pointer(cs))
}

func main() {
    str1 := "hi how are you\n"
    Print(str1)
}

myTest.h

代码语言:javascript
复制
void print_str(char *s);

myTest.c

代码语言:javascript
复制
#include "stdio.h"

void print_str(char *s)
{
    printf("%s\n", s?s:"nil");
}

在编译过程中,我得到了以下错误:

代码语言:javascript
复制
> go build myTest.go

# command-line-arguments
/tmp/go-build989557946/b001/_x002.o: In function `_cgo_4c80c9e4eaf0_Cfunc_print_str':
/tmp/go-build/cgo-gcc-prolog:49: undefined reference to `print_str'
collect2: error: ld returned 1 exit status

Go版本是:

代码语言:javascript
复制
> go version
go version go1.10 linux/amd64
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-29 14:54:31

$ go帮助构建使用: go build -o输出build标志编译由导入路径命名的包以及它们的依赖项,但是它没有安装结果。如果要生成的参数是.go文件的列表,则生成将它们视为指定单个包的源文件列表。<< SNIP>>

如果要生成的参数是.go文件的列表,则生成将它们视为指定单个包的源文件列表。

代码语言:javascript
复制
> go build myTest.go

构建文件myTest.go

代码语言:javascript
复制
> go build
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49556169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档