使用GTK3的Rust应用程序编译无误,但运行给予错误消息

ujv3wf0j  于 2023-03-08  发布在  其他
关注(0)|答案(2)|浏览(251)

我有一个小应用程序,如果我做一个println!(“Hello World”);正确编译和运行。如果我将源代码更改为

...
        let app = Application::builder()
        .application_id("com.xyz_Portfolio_Tracker")
        .build();
...

GTK 3中的这段代码可以编译,但在运行应用程序时会给予以下错误消息。

error: process didn't exit successfully:
        target\debug\xyz_tracker.exe (exit
        code:0xc0000139, STATUS_ENTRYPOINT_NOT_FOUND)

根据研究,错误信息应该指向一个丢失的“dll”。任何人都知道如何找出丢失的内容或以前解决过这个问题。

vdzxcuhz

vdzxcuhz1#

发现RUST编译器搜索Windows路径中的.lib。我有一个应用程序,它有所需的.lib,但在路径中的较高位置有较低的版本。一旦我在路径结构中向下移动应用程序,我正在构建的应用程序就可以运行了。

qacovj5a

qacovj5a2#

约翰提供的答案在精神上是正确的,但缺乏细节,将使答案尽可能有帮助,因为这是谷歌搜索与手头上的问题有关的2个结果之一,我想我应该为其他遇到这个问题的人添加一些细节。
最终,对我来说,问题是harfbuzz.dll文件位于系统范围的PATH环境变量的目录中,而MSVC构建的gtk4版本的harfbuzz.dll位于用户特定的PATH变量的目录中。
以下是我在处理此问题时收集的一些信息,可以帮助其他人找到相关问题的根本原因:

  • powershellcmd提示符下运行构建的GTK.exe将生成与原始问题中所示类似的输出,但是如果您在Explorer中找到该程序并双击运行它,则将弹出一个错误窗口,并给予.dll的名称和正在查找的缺少的入口点函数的名称
  • 我使用Process Explorer“DLL”选项卡找到了哪个.dll是有问题的文件,该选项卡显示了每个正在运行的进程的动态链接库及其在文件系统中的位置。我还遇到了一个Gist,它建议使用同一软件套件中的listdlls64.exe
  • same Gist提供了有关此问题的更多信息
  • These are the DLLs及其位置应该从GTK4构建版本(对于我的基本hello world应用程序)加载,包括从错误位置加载的harfbuzz.dll
  • These are the DLLs和它们的位置是Windows特定的,与当前的问题无关(至少在我的情况下是这样,而且我一般会假设是针对这个特定问题)
  • 从我发现的与此问题相关的帖子集合(包括之前链接的Gist)来看,Microsoft特定Java Hotspot安装的harfbuzz.dll似乎是罪魁祸首。检查您的PATH环境变量是否包含指向类似C:\...\jdk-<version numbers>-hotspot\bin的条目,然后删除该条目或将c:\gtk-build\gtk\<arch>\release\bin条目移动到更高的优先级而不是Java热点路径

相关问题