无法在没有 root 权限的情况下运行使用 GTK 的应用程序

无法在没有 root 权限的情况下运行使用 GTK 的应用程序

我用 C++ 编写了一个非常简单的可执行文件,它使用带有 gtk3 的 opencv 加载 jpeg 格式的图像并显示它,当我在没有 sudo 的情况下运行它时,出现错误:

Gtk-WARNING **: 21:58:36.172: Could not load a pixbuf from icon theme.
This may indicate that pixbuf loaders or the mime database could not be found.
**
Gtk:ERROR:../../../../gtk/gtkiconhelper.c:494:ensure_surface_for_gicon: assertion failed (error == NULL): Failed to load /org/gtk/libgtk/icons/16x16/status/image-missing.png: Fatal error reading PNG image file: Invalid IHDR data (gdk-pixbuf-error-quark, 0)
Bail out! Gtk:ERROR:../../../../gtk/gtkiconhelper.c:494:ensure_surface_for_gicon: assertion failed (error == NULL): Failed to load /org/gtk/libgtk/icons/16x16/status/image-missing.png: Fatal error reading PNG image file: Invalid IHDR data (gdk-pixbuf-error-quark, 0)
[1]    6329 IOT instruction  ./main 

但是如果我使用 sudo 运行它,一切正常。我四处搜索并尝试了在线找到的所有建议命令,包括:

sudo apt reinstall libgdk-pixbuf2.0-0
sudo /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/gdk-pixbuf-query-loaders --update-cache
sudo update-mime-database /usr/share/mime
sudo chmod -R uga-x /usr/share/mime; sudo chmod -R uga+X /usr/share/mime

以上都不起作用,我运行完所有步骤后也重新启动了系统,但仍然不起作用,需要帮助。

我在 WSL2 中使用的是 Ubuntu 18.04,我也在 WSL2 中新安装的 ubuntu 20.04 中测试了二进制文件,也发生了同样的事情。源代码和二进制文件可以在以下网址下载:https://github.com/shelper/vscode_cpp_cmake_example/releases/tag/test

答案1

我在https://devforum.play.date/t/segmentation-fault-running-playdatesimulator-on-linux/3360/4然后我尝试了sed -i s/png_/PNG_/g ./main,我收到错误消息undefined symbol: G_free。然后我重建二进制文件并运行sed -i s/png_/PNg_/g ./main,现在一切正常。我相信这是因为我用来构建 OpenCV 的 gtk-3 dev 包与我系统中的包具有 ABI 兼容性。但是,我不明白为什么sudo能够毫无问题地运行二进制文件。

相关内容