内置的C应用程序在其内置的文件夹中工作,当被带出文件夹时失败

内置的C应用程序在其内置的文件夹中工作,当被带出文件夹时失败,c,gtk,building,C,Gtk,Building,我正在用C制作一个应用程序,我使用以下命令构建了它: gcc `pkg-config --cflags gtk+-3.0` main.c -o hello `pkg-config --libs gtk+-3.0` -lX11 -rdynamic 这很管用,酷! 除了当我尝试将导出的文件复制到另一个文件夹(如/usr/bin)时,它会抛出以下错误: (hello:11178): GLib-GObject-WARNING **: 16:35:55.999: invalid (NULL) point

我正在用C制作一个应用程序,我使用以下命令构建了它:

gcc `pkg-config --cflags gtk+-3.0` main.c -o hello `pkg-config --libs gtk+-3.0` -lX11 -rdynamic
这很管用,酷! 除了当我尝试将导出的文件复制到另一个文件夹(如/usr/bin)时,它会抛出以下错误:

(hello:11178): GLib-GObject-WARNING **: 16:35:55.999: invalid (NULL) pointer instance

(hello:11178): GLib-GObject-CRITICAL **: 16:35:55.999: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(hello:11178): Gtk-CRITICAL **: 16:35:55.999: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed
这是我的密码。 忽略介子文件。

包装配置:

-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/libdrm -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include```

我没有测试代码,但我看到您正在使用相对路径打开Glade生成的文件。您对
gtk\u builder\u add\u from\u file
的所有调用如下所示:

gtk_builder_add_from_file (builder, "main_window.glade", NULL);
如果只移动二进制文件,它将无法再找到这些文件。避免这种情况的一种方法是

此外,还需要进行一些适当的错误检查。如果请求
GError**error
,请使用它并检查错误,而不是传递NULL,然后打印GError返回的消息,这将为您节省大量时间

guint
gtk_builder_add_from_file (GtkBuilder *builder,
                           const gchar *filename,
                           GError **error);

有关更多信息,请阅读工作原理(请参阅“说明”部分)。

您能向我们展示一下什么
pkg配置--cflags gtk+-3.0
输出吗?我当然能!将其添加到底部的帖子中。为你的回答干杯!如果您将可执行文件从主目录复制到另一个目录,例如~/local/bin,会怎么样?我怀疑这可能是一个特权问题。嗨,我没有找到那个目录,所以我创建了它。我似乎仍然会遇到同样的错误。我要做的是将
选项\u open
main
函数与printfs混合,然后查看
homedir
设置为什么。嗨!谢谢你的回答。我似乎在介子中得到了以下错误:致命错误:gtk/gtk.h:当然没有这样的文件或目录。您应该声明依赖项,然后在
可执行文件中使用它们,而不是相反。可执行文件具有依赖性,这很有意义。我也不明白为什么在add_project_参数中调用pkg config,这毫无意义。介子已经知道pkg config并知道如何调用它。请阅读介子网站上的例子。谢谢!我承认我是个白痴,但我不明白如何用你给我的链接引用介子文件中的路径。抱歉。您应该停止按文件加载和按GResource加载:-GResource建议有效,我的问题已解决。大家干杯!