Не могу скомпилировать крошечный C-код, который использует librsvg

Я почти полный noob в мире Linux и использую Ubuntu 14.04 LTS с gnome-session-fallback (compiz) под VirtualBox на машине с Windows 8.1. Моя цель - использовать эту библиотеку: 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'. Поэтому я изменил 3-ю строку кода выше. Позже я установил библиотеку gtk dev после ответа stackoverflow. И тогда я столкнулся с ошибкой, которую не могу устранить: "фатальная ошибка: glib-object.h: такого файла или каталога нет" в файле "rsvg.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 while-using-librsvg Но это слишком сложно для новичка, как я.

Я думаю, что моя цель (собрать единственный маленький файл 'svg2cairoxml.c') довольно проста для опытных программистов linux. Так может кто-нибудь, пожалуйста, помогите мне сделать это? Также я предполагаю, что я делаю что-то неправильно, например, использую неправильную версию библиотек или что-то вроде этого.

1 ответ

Решение

Когда пакет разработки устанавливает свои заголовочные и / или библиотечные файлы в места, которые не находятся непосредственно в стандартном пути поиска компилятора, вам необходимо явно указать их местоположение. Чтобы сделать это на gcc командной строки, например, вы бы использовали подходящий -I (включите путь) и -L (путь к библиотеке). Вы также должны указать компоновщику, какие конкретные библиотеки связать из этих путей поиска, используя -l директивы, такие как -lrsvg-2 для librsvg-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+ для разработки с Code::Blocks в Ubuntu Linux, добавьте pkg-config Подстановка команд непосредственно на вкладку Другие параметры выглядит следующим образом:

Код:: Блокирует настройку pkg-config --cflags

введите описание изображения здесь

Другие вопросы по тегам