无法编译使用 librsvg 的微小 C 代码

无法编译使用 librsvg 的微小 C 代码

我对 Linux 世界几乎一窍不通,我在 Windows 8.1 机器上的 VirtualBox 下使用带有 gnome-session-fallback (compiz) 的 Ubuntu 14.04 LTS。我的目标是使用这个库: https://github.com/akrinke/svg2cairo

我唯一需要做的就是编译“svg2cairoxml.c”。这是该文件的非常简化的版本:

#include <stdio.h>
#include <stdlib.h>
#include <librsvg/rsvg.h>
#include <cairo/cairo.h>

int main(int argc, char *argv[]) {
    return 0;
}

我尝试使用 Code::Blocks 13.12 和 Anjuta 3.10.2,但没有成功。它们都在编译时产生错误“致命错误:librsvg/rsvg.h:没有这样的文件或目录”。我设法在另一个位置找到了这个文件:“librsvg-2.0/librsvg/rsvg.h”。所以我更改了上面代码的第三行。后来我按照 stackoverflow 的回答安装了 gtk dev 库。然后我在文件“rsvg.h”中遇到了无法解决的错误:“致命错误:glib-object.h:没有这样的文件或目录”:

// this is line 31
#include <glib-object.h>

我也找到了这个文件,实际路径是“glib-2.0\glib-object.h”。但问题是“rsvg.h”受到保护,所以我无法更改它。这就是我被困住的地方。

我还发现了以下说明:

https://stackoverflow.com/questions/7537008/compilation-error-while-using-librsvg 但这些对于我这样的新手来说太复杂了。

我认为我的目标(编译唯一的小型“svg2cairoxml.c”文件)对于经验丰富的 Linux 程序员来说相当容易。那么有人能帮我做一下吗?另外我猜我做错了什么,比如使用了错误版本的库或类似的事情。

答案1

当开发包将其头文件和/或库文件安装在标准编译器搜索路径之外的位置时,您需要自己明确指定位置。gcc例如,要在命令行上执行此操作,您可以使用合适的-I(include path) 和(library path) 指令。您还需要使用指令(例如librsvg-2 -L)告诉链接器从这些搜索路径链接哪些特定库。-l-lrsvg-2

由于路径和库可能变得相当复杂,并且根据确切的平台而有所不同,因此一些开发包提供了包配置.pc)文件,实用程序可以查询该文件pkg-config以在构建时生成适当的指令。该librsvg-dev包就是这样一个,因此要在命令行上构建您的简单程序,只需

gcc svg2cairoxml.c `pkg-config --cflags --libs librsvg-2.0`

要在 IDE 中实现相同功能,您有几个选择:您可以运行

pkg-config --cflags librsvg-2.0

pkg-config --libs librsvg-2.0

在终端中并将结果输出复制到适当的编译器和链接器设置框中,或者按照 StackOverflow 上类似问题的答案进行操作如何设置 GTK+ 以在 Ubuntu Linux 上使用 Code::Blocks 进行开发,将pkg-config命令替换直接添加到Other options选项卡中,如下所示:

Code::Blocks pkg-config --cflags 设置

在此处输入图片描述

相关内容