< 返回版块

Freddie Mercury 发表于 2020-06-26 20:42

在尝试Windows下使用Gtk.rs编写GUI程序。 按照官网教程安装GTK后,编译通过,也产生了exe文件。 非常奇怪,点击执行时提示:Entry Point Not Found这个错误。 说是动态链接库C:\msys64\mingw64\bin\lib***.dll无法定位,但实际上环境变量都已经更改过了,且按照Github上的方法将mingw64放到了PATH的首位,路径下也的确有那个dll文件存在。 有大佬也遇到过这样的情况么?

评论区

写评论
Neutron3529 2020-06-29 13:59

的确,我的错。

记得很早之前拿pthread开多线程的时候注册过dll,只知道dll的搜索路径是工作目录+system32目录+(可能还有但我不知道了)

然而一切细节都忘干净了。

(我怀疑是msys2的问题,如果用msys2打开.exe,有可能dll调用正常)

(毕竟dll是msys2里面的组件)

--
👇
spacemeowx2: Neutron3529 别误导人了...DLL注册是ActiveX组件才需要做的事情, 标准DLL是不需要注册的. 题主的问题是需要搞清楚DLL依赖, 把正确的DLL让exe加载到, mingw环境下编译的exe是需要一个DLL来跑的,

可以用这个工具看看依赖: https://www.dependencywalker.com/, 也可以配合procmon来看看到底是哪个DLL加载有问题

spacemeowx2 2020-06-29 10:07

Neutron3529 别误导人了...DLL注册是ActiveX组件才需要做的事情, 标准DLL是不需要注册的. 题主的问题是需要搞清楚DLL依赖, 把正确的DLL让exe加载到, mingw环境下编译的exe是需要一个DLL来跑的,

可以用这个工具看看依赖: https://www.dependencywalker.com/, 也可以配合procmon来看看到底是哪个DLL加载有问题

Neutron3529 2020-06-29 00:45

DllRegisterServer entry point was not found

这句话大概说得很清楚了

——你的dll有问题

要不然就是32bit/64bit的问题

要不然就是编译错误

找不到entry point的意思是dll不对

或许你应该下载一个新dll,或者试着重新编译这个dll(或者用另一个mingw,比如mingw-w64(而非msys2))

话说如果我没有理解错的话

最后,你有没有试过用msys2调用你编译出来的exe呢?

--
👇
Freddie Mercury: 谢谢回复。

  • 将dll复制到了编译目录下,运行时还是报原来的错,但里面提示的dll路径已经变成了编译目录,说明的确识别到了dll。

  • 通过regsvr32注册dll,提示DllRegisterServer entry point was not found

方向看来是对的,大概率是dll注册出了问题,现在在MSDN上查资料 :\

--
👇
Neutron3529: 是不是忘了注册了?

你试试这个https://jingyan.baidu.com/article/e75aca850f574c142edac6ee.html

或者,把缺少的.dll复制到.exe所在的目录

最后,你确定你的dll跟exe的版本一致吗?

如果是64位.exe配32位.dll,大概会出问题的

作者 Freddie Mercury 2020-06-27 08:24

谢谢回复。

  • 将dll复制到了编译目录下,运行时还是报原来的错,但里面提示的dll路径已经变成了编译目录,说明的确识别到了dll。

  • 通过regsvr32注册dll,提示DllRegisterServer entry point was not found

方向看来是对的,大概率是dll注册出了问题,现在在MSDN上查资料 :\

--
👇
Neutron3529: 是不是忘了注册了?

你试试这个https://jingyan.baidu.com/article/e75aca850f574c142edac6ee.html

或者,把缺少的.dll复制到.exe所在的目录

最后,你确定你的dll跟exe的版本一致吗?

如果是64位.exe配32位.dll,大概会出问题的

Neutron3529 2020-06-26 21:06

是不是忘了注册了?

你试试这个https://jingyan.baidu.com/article/e75aca850f574c142edac6ee.html

或者,把缺少的.dll复制到.exe所在的目录

最后,你确定你的dll跟exe的版本一致吗?

如果是64位.exe配32位.dll,大概会出问题的

1 共 5 条评论, 1 页