![无法编译使用 librsvg 的微小 C 代码](https://linux22.com/image/1049730/%E6%97%A0%E6%B3%95%E7%BC%96%E8%AF%91%E4%BD%BF%E7%94%A8%20librsvg%20%E7%9A%84%E5%BE%AE%E5%B0%8F%20C%20%E4%BB%A3%E7%A0%81.png)
我对 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选项卡中,如下所示: