web-dev-qa-db-fra.com

Impossible de compiler un petit code C qui utilise librsvg

Je suis presque un noob complet dans le monde Linux et j'utilise Ubuntu 14.04 LTS avec gnome-session-fallback (compiz) sous VirtualBox sur une machine Windows 8.1. Mon objectif est d'utiliser cette bibliothèque: https://github.com/akrinke/svg2cairo

La seule chose dont j'ai besoin est de compiler 'svg2cairoxml.c'. Voici une version très simplifiée de ce fichier:

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

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

J'ai essayé d'utiliser Code :: Blocks 13.12 et Anjuta 3.10.2 sans succès. Les deux produisant l'erreur "erreur fatale: librsvg/rsvg.h: aucun fichier ou répertoire de ce type" lors de la compilation. J'ai réussi à trouver ce fichier sous un autre emplacement: "librsvg-2.0/librsvg/rsvg.h". J'ai donc changé la 3ème ligne du code ci-dessus. Plus tard, j'ai installé la bibliothèque de développement gtk après la réponse de stackoverflow. Et puis j'ai rencontré une erreur que je ne peux pas résoudre: "erreur fatale: glib-object.h: aucun fichier ou répertoire" dans le fichier 'rsvg.h':

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

J'ai également localisé ce fichier, le vrai chemin est 'glib-2.0\glib-object.h'. Mais le truc est que "rsvg.h" est protégé donc je ne peux pas le changer. Et c'est là que je suis coincé.

J'ai aussi trouvé ces instructions:

https://stackoverflow.com/questions/7537008/compilation-error- while-using-librsvg Mais ceux-ci sont trop compliqués pour noob comme moi.

Je pense que mon objectif (compiler le seul petit fichier 'svg2cairoxml.c') est assez facile pour les programmeurs Linux expérimentés. Alors, quelqu'un peut-il m'aider à le faire? Je suppose aussi que je fais quelque chose de mal comme utiliser une mauvaise version des bibliothèques ou quelque chose comme ça.

2
YuriM

Lorsqu'un package de développement installe son en-tête et/ou ses fichiers de bibliothèque à des endroits qui ne se trouvent pas directement sur le chemin de recherche du compilateur standard, vous devez spécifier les emplacements vous-même de manière explicite. Pour ce faire, par exemple sur la ligne de commande gcc, vous devez utiliser -I (inclure le chemin) et -L (chemin d'accès à la bibliothèque). Vous devez également indiquer à l'éditeur de liens les bibliothèques spécifiques à lier à partir de ces chemins de recherche à l'aide de -l des directives telles que -lrsvg-2 pour librsvg-2.

Étant donné que les chemins et les bibliothèques peuvent devenir assez complexes et varier en fonction de la plate-forme exacte, certains packages de développement fournissent une configuration de package (.pc) fichier pouvant être interrogé par le pkg-config utilitaire pour générer les directives appropriées au moment de la construction. Le librsvg-dev le package en fait partie, donc pour construire votre programme simple sur la ligne de commande, tout ce qui est nécessaire est

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

Pour obtenir la même chose au sein de votre IDE, vous avez deux options: vous pouvez soit exécuter

pkg-config --cflags librsvg-2.0

et

pkg-config --libs librsvg-2.0

dans un terminal et copiez la sortie résultante dans les zones de paramètres du compilateur et de l'éditeur de liens appropriés ou, à la suite de cette réponse à une question similaire sur StackOverflow Comment configurer GTK + pour développer avec Code :: Blocks sur Ubuntu Linux , ajoutez les pkg-config substitution de commandes directement au Other options onglet comme suit:

Code::Blocks pkg-config --cflags setting

enter image description here

2
steeldriver