1

我在 ubuntu 下编写了一个程序,其中包含 gtkmozembed.h。我在编译程序时遇到了问题。下面是使用 gtkmozembed 的程序的最简单形式。

#include <gtk/gtk.h>
#include <stdio.h>
#include <gtkmozembed.h>

int main(){
        GtkWidget *mozEmbed;
        mozEmbed = gtk_moz_embed_new();
        return 0;
}

尽管,上面的程序什么也没做,编译那个程序对我来说很多......我正在尝试编译上面的程序,如下所示

gcc `pkg-config --libs --cflags gtk+-2.0` test.c -o test

它给出了以下错误......

error: gtkmozembed.h: No such file or directory

我可以理解,必须在上面的 gcc 行中添加其他内容,以便编译器可以找到 gtkmozembed.h,但没有得到那是什么,“某事”……寻求某人的帮助……谢谢…… .

4

3 回答 3

1

您的问题是gtkmozembed.h在标准包含文件查找路径中找不到它(好吧,错误确实很明显地告诉您)。在我的系统上它存在$(include)/gtkmozembed/,所以你有两个选择

  1. 更改源中包含文件的路径

    #include <gtkmozembed/gtkmozembed.h>
    
  2. 或手动将路径添加到查找路径

    gcc `pkg-config --libs --cflags gtk+-2.0` -I/usr/include/gtkmozembed test.c -o test
    

您应该选择选项 1)。

这将告诉gcc在哪里可以找到包含文件,但正如 Matthew 指出的那样,这还不够:您很可能还需要添加更多信息以进行链接并需要额外的包含。值得庆幸的是 gtk-mozembed 带有一个pkg-config文件,因此您可以获得所有需要的信息,就像您gtk+-2.0使用

pkg-config --libs --cflags mozilla-gtkmozembed-embedding

或与其他呼叫结合

gcc `pkg-config --libs --cflags gtk+-2.0 mozilla-gtkmozembed-embedding` test.c -o test

您还应该(只是为了好玩)看看有什么pkg-config作用。"`" 中的部分正是 shell 在执行该命令时返回的内容。在我的机器上:

$ pkg-config --libs --cflags mozilla-gtkmozembed-embedding
-DXPCOM_GLUE -fshort-wchar \
-I/usr/include/xulrunner-1.9.2  -L/usr/lib/xulrunner-devel-1.9.2/lib -lxpcomglue 

(我添加的换行符)。这些-I部分只是将额外需要的目录添加到包含文件查找路径中——它们是因为您使用--cflags. with 的条目-lxpcomglue是由于调用 with--libs并要求链接该库,即libxpcomglue.so. 它位于/usr/lib/xulrunner-devel-1.9.2/lib。其余的是gtkmozembed 所需的一个define和一个标志。gcc

于 2010-04-16T14:46:03.443 回答
1

安装 libxul-dev ( sudo apt-get install libxul-dev) 并包含

#include <gtkmozembed.h>

在主文件(test.c)中并编译

gcc `pkg-config --cflags --libs gtk+-2.0 xulrunner-gtkmozembed`  test.c -o test
于 2010-04-22T04:21:09.047 回答
0

试试这个:

gcc `pkg-config --libs --cflags gtk+-2.0 mozilla-gtkmozembed-embedding` test.c -o test
于 2010-04-17T20:44:27.217 回答