当前位置: 首页 > 面试题库 >

从Go的so文件中调用函数

薛文斌
2023-03-14
问题内容

是否可以从Go调用静态对象(.so)文件?我一直在搜寻Google,我不断提出我可以做到的主张

lib, _ := syscall.LoadLibrary("...")

但是尝试这样做会出现错误

undefined: syscall.LoadLibrary

并搜索Godocs,但在syscall包中找不到对此功能的引用。是否可以加载库并调用其函数?


问题答案:

在POSIX平台上,您可以cgo用来调用dlopen和朋友:

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
import "C"

import fmt

func foo() {
     handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY)
     bar := C.dlsym(handle, C.CString("bar"))
     fmt.Printf("bar is at %p\n", bar)
}


 类似资料:
  • 问题内容: 我正在尝试创建一个用Go语言编写的静态对象,以与C程序(例如内核模块等)进行接口。 我已经找到了有关从Go调用C函数的文档,但是关于如何走另一条路却找不到很多。我发现这是可能的,但很复杂。 这是我发现的: 有关C和Go之间的回调的博客文章 CGO文档 Golang邮件列表帖子 有任何人对此有经验吗?简而言之,我正在尝试创建一个完全用Go编写的PAM模块。 问题答案: 您可以从C调用Go

  • 一直以来不会使用C++一直是我心头痛,不过学习Go从某种意义上补偿了我这个遗憾。 比如生成dll一直以来几乎就是C和C++的专利,现在我可以用Go轻松的实现这一点。 下面我使用一个实例来做到这一点,这个是我写的判断jpeg图是不是正向的一个Go的函数 package main import "C" import ( "fmt" "os" SunnyUtil "githu

  • 问题内容: 我在下有两个文件,另一个在程序包中包含一些功能的文件称为函数。 我的问题是:如何从中调用函数? 文件1:main.go(位于MyProj / main.go中) 文件2:functions.go(位于MyProj / functions / functions.go中) 问题答案: 您可以通过包的导入路径导入包,并通过包名引用其所有导出的符号( 以大写字母 开头的符号),如下所示:

  • 问题内容: 目标: 我想使用HTTP触发器重用两个Go函数中的许多Go函数。 我尝试过的方法和重现此问题的步骤: 在GCP中,创建一个新的Go 1.11 Cloud Function,HTTP触发器 命名: 在中,粘贴以下内容: 在中,粘贴以下内容: 在要执行的函数中,粘贴以下代码: 单击部署。有用。 在GCP中创建另一个Go无服务器功能 在功能上。去,粘贴这个: 在中,粘贴以下内容: 在要执行的

  • 问题内容: 有没有办法用C#P / Invoke调用用C编写并在Unix上构建的共享对象文件? 还是我需要使用Java或类似的东西? 问题答案: Mono具有从dlopen(3)之上构建的C#中与本机库集成的能力。您只需要使用带有库名称的DllImport语句(即“ libform.so.5”),然后使用友好的C#类包装本机代码和数据类型,即可处理所有低级内容。该页面具有很好的概述,其中包含有关如

  • 问题内容: 设置:我需要在程序中使用的每个功能都有一个文件。 在此程序中,我需要从外部文件调用该函数。 我试过了: 但是我得到了错误: ImportError:没有名为“ file.py”的模块;文件不是包 我该如何解决这个问题? 问题答案: 导入时无需添加任何内容。只需编写,然后使用调用函数。之所以可能不起作用,是因为它是Python的核心模块之一,所以我建议你更改文件名。 请注意,如果你尝试将