我的编程空间,编程开发者的网络收藏夹
学习永远不晚

加载 dll 失败。找不到指定的模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

加载 dll 失败。找不到指定的模块

大家好,今天本人给大家带来文章《加载 dll 失败。找不到指定的模块》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我有一些用 golang(在 ubuntu 上)编写的代码,并尝试打包为 windows exe,但不幸的是,由于 github 项目的一些 cgo 依赖项,我最终不得不按照以下方式将我的包构建为 dll这个答案https://stackoverflow.com/a/49079049/4750381,因为它不会编译为windows的可运行exe文件(即使使用mingw)。

我的编译行是:

goos=windows goarch=386 cgo_enabled=1 cc=i686-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.go

我的主包代码如下所示:

package main

import (
    "c"
    "fmt"

    console "github.com/asynkronit/goconsole"
    "github.com/asynkronit/protoactor-go/actor"
    "path/to/repo"
)

const cfgpath string = "./config.json"

func main() {
    fmt.println("from main")
}

func dllrun() {
    // used for running the test and various other operations, thus generally all lines except 1 will be commented out

    ctx := actor.emptyrootcontext
    props := actor.propsfromproducer(testmachine.newtestmachine(cfgpath))
    pid, err := ctx.spawnnamed(props, "tm")
    if err != nil {
        panic(err)
    }
    defer func() { // run after the read line fucntion executes and terminates the program
        ctx.poison(pid)
    }()
    console.readline()
}

我编写了另一个 go 脚本(这次使用 windows)来尝试加载和读取该 dll 文件:

import (
    "syscall"
)

func main() {
    mydll := syscall.newlazydll("c:/users/konyenso/documents/dllopener/main.dll")
    maincall := mydll.newproc("dllrun")

    ret, _, err := maincall.call()
    if err != nil {
        panic(err) // calling mydll.maincall failed
    }

    if ret == 0 {
        print("could not set the desired attributes")
        // todo: call getlasterror to get more information
    }

    print("ok")
}

但是现在即使我的文件路径没问题,我总是收到以下错误:

panic: failed to load c:/users/konyenso/documents/dllopener/main.dll: the specified module could not be found.

goroutine 1 [running]:
syscall.(*lazyproc).mustfind(0x13019400)
        c:/go/class="lazy" data-src/syscall/dll_windows.go:311 +0x42
syscall.(*lazyproc).call(0x13019400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4623e0)
        c:/go/class="lazy" data-src/syscall/dll_windows.go:327 +0x21
main.main()
        c:/users/konyenso/documents/dllopener/main.go:11 +0xa5

请有人告诉我我做错了什么?我一整天都在对此进行调整,但收效甚微。理想情况下,我想直接从 ubuntu 构建一个 exe,而不需要 dll,但如果这不可行,我至少希望能够从另一个 exe 文件运行我的 dll。 感谢您的帮助。

************ 编辑**************************** 所以我写了一些c++代码来尝试打开dll文件(制作了64位和32位版本)

#define UNICODE
#include <windows.h>
#include <iostream>


typedef int (__stdcall *f_funci)();

int main()
{
  HINSTANCE hGetProcIDDLL = LoadLibrary((LPCWSTR)"C:\\Users\\konyenso\\Documents\\DLLOpener\\main.dll");

  if (!hGetProcIDDLL) {
    std::cout << "could not load the dynamic library" << std::endl;
    return EXIT_FAILURE;
  }

  // resolve function address here
  f_funci funci = (f_funci)GetProcAddress(hGetProcIDDLL, "dllRun");
  if (!funci) {
    std::cout << "could not locate the function" << std::endl;
    return EXIT_FAILURE;
  }

  std::cout << "funci() returned " << funci() << std::endl;

  return EXIT_SUCCESS;
}

同样的问题: 屏幕截图显示无法加载

正如您从下面的屏幕截图中看到的,文件路径匹配,所以我不知道发生了什么。 显示已确认路径的屏幕截图


解决方案


首先,你需要像这样导出dll方法:

// export dllRun
func dllRun() {

有一个简单的例子, https://github.com/whtiehack/checkdll_log

第二, go main 程序无法正确加载 go dll 因为 https://github.com/golang/go/issues/34168 https://github.com/golang/go/issues/22192

综上所述,在windows中,一个主程序中不能有两个以上的go运行时

终于介绍完啦!小伙伴们,这篇关于《加载 dll 失败。找不到指定的模块》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

加载 dll 失败。找不到指定的模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

加载 dll 失败。找不到指定的模块

大家好,今天本人给大家带来文章《加载 dll 失败。找不到指定的模块》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!问题内容我有一些用 golang(在 ubuntu 上
加载 dll 失败。找不到指定的模块
2024-04-04

加载c:\windows\system32\*.dll出错 找不到指定的模块

解决办法一:开始——运行——msconfig——启动——把加载项***.dll的那个勾去掉,重启电脑,android通常到这就可以了,如果还弹出
2023-05-23

C#调用dll报错:无法加载dll,找不到指定模块的解决

这篇文章主要介绍了C#调用dll报错:无法加载dll,找不到指定模块的解决问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

windows找不到指定的模块如何解决

这篇文章主要介绍“windows找不到指定的模块如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows找不到指定的模块如何解决”文章能帮助大家解决问题。找不到指定的模块解决方法:1、右
2023-07-01

thinkphp找不到指定模块如何解决

这篇文章主要介绍“thinkphp找不到指定模块如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkphp找不到指定模块如何解决”文章能帮助大家解决问题。thinkphp找不到指定模块的
2023-07-04

win10找不到指定模块如何解决

当您在Windows 10中遇到"找不到指定模块"的错误时,可能是由于以下原因导致的:1. 文件或程序已被删除或移动:如果您尝试运行一个已被删除或移动的文件或程序,系统就会报错。在这种情况下,您可以尝试重新安装该文件或程序,或者恢复该文件或
2023-08-20

python找不到指定模块如何解决

当Python找不到指定的模块时,可能有以下几种原因和解决方法:1. 模块没有安装:首先要确保需要的模块已经安装。可以使用pip命令来安装模块,例如`pip install 模块名`。如果使用的是Python3,则需要使用pip3命令,例如
2023-09-15

loadlibrary找不到指定模块如何解决

如果 `loadlibrary` 找不到指定模块,有可能是由于以下几个原因:1. 模块文件不存在:确保指定的模块文件存在于正确的路径中。检查文件名、路径和文件扩展名是否正确。2. 32位和64位不匹配:如果你的操作系统是64位的,但是指定的
2023-09-17

windows update找不到指定的模块如何解决

出现 "Windows Update 找不到指定的模块" 的错误通常是由于某些系统文件损坏或丢失引起的。以下是一些可能的解决方法:1. 运行系统文件检查器 (SFC):- 在开始菜单中搜索 "命令提示符",右键点击并选择 "以管理员身份运行
2023-09-08

cnsmin.dll出错找不到指定模块怎么办

小编给大家分享一下cnsmin.dll出错找不到指定模块怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!出现问题的原因:可能是由于该文件的丢失或者损坏导致,而电脑启动的时候,这个插件会自动启动,所以会出现这样的问题。解
2023-06-13

win10 rundll找不到指定模块如何解决

当你在Windows 10上遇到“rundll找不到指定模块”的错误时,这可能是由于以下几个原因导致的:1. 文件丢失或损坏:可能是由于某个DLL文件丢失或损坏导致的。这可能是由于病毒感染、硬盘故障或意外删除文件等原因引起的。2. 注册表错
2023-08-29

python运行找不到指定的模块怎么解决

当Python运行找不到指定的模块时,可以尝试以下几种解决方法:1. 确保模块已经安装:使用`pip`命令或其他包管理工具安装需要的模块。2. 检查模块名称拼写:确保导入的模块名称没有拼写错误。3. 检查模块路径:Python默认会在系统路
2023-08-15

Win11更新找不到指定模块如何解决

出现"找不到指定模块"错误可能是由于系统文件缺失或损坏所致。以下是一些常见的解决方法:1. 运行系统文件检查工具:按下Win + X,选择“命令提示符(管理员)”或“Windows PowerShell(管理员)”,然后输入“sfc /sc
2023-08-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录