我有一些Go代码和一些C代码(确实有点)。 我正在从执行代码中调用C代码。 这是一个例子:

test.h

#ifndef TEST_H
#define TEST_H

void test();

#endif

test.c的

#include "test.h"

#include <stdio.h>

void test() {
    printf("Hello from C!")
}

main.go

package main

// #include "test.h"
import "C"
import "fmt"

func main() {
    C.test()
}

想象一下,我还有更多的C代码。 此C代码需要一段时间才能编译。 使用go build编译时,每次都会重新编译C。 是否可以编译C并单独运行? 就是说,如果我正在研究Golang代码,就不必编译为C代码吗?

我尝试链接目标文件,但效率似乎很低。 如果这是最好的选择? 如果是这样,您能否提供一个代码示例向我展示如何操作(因为我的方法仅适用于Linux)。

  ask by Milo Banks translate from so

本文未有回复,本站智能推荐:

1回复

将go链接器构建为独立工具[关闭]

我正在浏览go源码,我想将其构建为osx的独立链接器,可以生成mach-o文件。 反正有这样做吗?
1回复

当我导入2个通过Cgo使用C包的不同包时,Gocompile返回架构x86_64错误的重复符号

这是我的代码: 当我编译(我使用go mod来管理包)时,它会返回以下错误: 为什么? 我有一些调查: 这两个软件包使用相同的hidapi和libusb C软件包,以便与usb设备进行交互。 那些C包是相同的,因此它定义了相同的功能,所以我认为它与错误直接相关。 在
1回复

C常量的Cgo链接器错误

我正在使用cgo包装C库,并且遇到了一组奇怪的链接器错误。 我将问题归结为以下几点: 文件header.h包含 并且test.go包含 在运行go run test.go ,出现以下错误: 我对此有两个问题: 为什么链接器与预定义常量有关系? 为什么CONSTANT
1回复

使用CGO链接两个具有相同函数名称的C库?

例如,我有两个具有相同函数名称的 C 库: 你好1.c:#include <stdio.h>void hello() { printf("Hello from C hello1.c\n");} 你好2.c:#include <stdio.h>void hello() {
1回复

使用Go1.5buildmode=c-archive与从C链接的net/http.Server

即将发布的Go 1.5版本附带了新的构建模式 ,允许导出Go符号从C代码链接和调用。 我一直在玩它并得到基本的“Hello world”示例,但是现在我正在尝试链接一个启动net/http.Server的Go库,但它失败了。 代码看起来像这样( 它也可以在这里获得 ): gohttpli
1回复

用C接口构建Got+

我正在尝试构建一个Go程序,该程序使用外部C代码作为Gtk +的接口。 那是我获得的基本的Go代码(ui.h.go): C代码从vala编译为目标文件(ui.o)和头文件(ui.h): 当我尝试go build ui.h.go我得到: 符合逻辑,我还没有提供目标文件。 但是如果
2回复

快速链接并使用C/C++库进行构建

我没有任何快速的经验。 我有一个静态库libseriallib.a ,它是用C ++编写的,但是通过使用extern C具有C包装器接口。 我想将此库链接到一个快速的iOS应用程序中。 我正在从头开始创建此应用程序。 libseriallib.a依赖于三个库。 它们是: libz
1回复

去代码构建链接器错误。我可以手动链接吗?

我正在构建大量使用CGo的Go代码,并且必须将此代码编译为共享或静态库(静态是高度首选)。 ( 代码参考 ) 这一切在Linux和Mac上运行得很好,但是在Windows上它在链接器阶段失败要么说所有4种模式(c-shared,shared,c-archive,archive)都不可用,要