1

我有一个用 C 编写的简单 Gtk GUI 应用程序。我希望能够在我的主窗口的框架内渲染外部图像。代码如下:

GtkWidget myImage;
myImage = gtk_image_new_from_file("assets/image.png");
gtk_fixed_put(FTK_FIXED(frame), myImage, 0, 0));

图像按预期显示,但前提是我cd进入它存在的目录。IE:

cd /tmp/bin/
./gtktest

如果我像这样从另一个位置运行它,则永远找不到该图像。

/tmp/bin/gtktest

有没有办法让应用程序将当前工作目录(PWD)设置为二进制文件本身的位置?

谢谢你。

4

3 回答 3

2

将资产放在 a 中GResource并将它们直接编译到您的程序中。

于 2014-02-23T18:41:01.180 回答
2

您正在使用相对路径,cwd但您需要使用基于程序二进制位置的相对路径或基于文件系统根目录的绝对路径,例如/usr/lib/yourprogram/assets.

如果您想根据二进制文件的位置构建相对路径,这在某些情况下可能更灵活,那么您应该使用dirname(). 像这样:

char *my_location = dirname(argv[0]); // argv[0] contains the path to the binary

检查man 3 dirname更多信息。

于 2014-02-21T18:58:29.103 回答
1

您可以从 Gtk 程序或其 Glib 包装器g_chdir内部调用chdir(2)

于 2014-02-21T20:07:24.050 回答