IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

pdflib et gcc


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Par défaut pdflib et gcc
    Bonjour à tous,

    Je suis plutôt debutant en C et habitué aux language interprétés type perl ou python, mais j'ai besoin d'écrire un prog. qui me génère des pdf avec PDFLIB et impossible de trouver les packages pour le binding avec perl ou python.
    Bref comme la doc fournis des exemples en C je me lance.

    le problème c'est que je n'arrive même pas à compilé le "hello world" fourni :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #include <stdio.h> 
    #include <stdlib.h> 
    #include "pdflib.h" 
    int main(void) 
    { 
        PDF *p; 
        int font;
        p = PDF_new(); 
        /* open new PDF file */ 
        if (PDF_open_file(p, "hello_c.pdf") == -1) { 
            fprintf(stderr, "Error: couldn’t open PDF file.\n"); 
            exit(2); 
        } 
        PDF_set_info(p, "Creator", "hello.c"); 
        PDF_set_info(p, "Author", "Thomas Merz"); 
        PDF_set_info(p, "Title", "Hello, world (C)!"); 
        PDF_begin_page(p, a4_width, a4_height); /* start a new page */ 
        font = PDF_findfont(p, "Helvetica-Bold", "host", 0); 
        PDF_setfont(p, font, 24); 
        PDF_set_text_pos(p, 50, 700); 
        PDF_show(p, "Hello, world!"); 
        PDF_continue_text(p, "(says C)");
        PDF_end_page(p); /* close page */ 
        PDF_close(p); /* close PDF document */ 
        PDF_delete(p); /* delete the PDF "object" */ 
        return 0; 
    }
    Je suis sous mandrake et j'ai pdflib installé ( /usr/lib/libpdf.so.1 ) et j'ai récupérer l'archive de pdflib pour retrouver les headers.
    Le problème c'est que si je compile, je me retrouve avec une floppée d'erreurs du type "la PDF_new() does not exist" , PDF_open_file() does not exist ...
    j'utilise :

    gcc -static -I../../pdflib/ hello.c

    ( les headers se trouvent dans ../../pdflib/pdflib.h )

    Il y a un truc que je ne saisit pas avec la compilation, l'exemple est pourtant très simple.

    quelqu'un peut-il m'aider svp ?

    Gis.

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Lire la documentation de gcc. Pour lier une bibliotheque situee a /toto/titi/libtutu.a (ou .so), il faut donner les options -ltutu -L/toto/titi.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Par défaut
    DaZumba,

    Merci pour ta réponse rapide.
    J'ai lu me man de gcc et j'ai essayé ça aussi, (j'ai essayé un tas de truc tout le weekend en fait).

    avec les options -l et -L j'ai l'erreur :

    ld : file not found libpdf.so.1

    Veux-tu dire qu'avec l'option -l il ne faut pas donner le nom du fichier mais le nom de la bibliothèque ( sans le préfixe "lib" et l'extension ).
    Désolé pour mon niveau plus que débutant en gcc.

    Gis.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    C'est exact, l'option -ltoto se lit 'faire le lien avec la bibliotheque libtoto.so'. Evidemment, il faut que le fichier existe et porte ce nom.
    Donc, regarde comment s'appelent tes biblios dans le repertoire pdflib. Il doit y avoir un libpdf.so (.a) quelque-part. S'il n'existe pas et un autre fichier porte des indications de numero de version, genre libpdf.so.123, alors cree un lien symbolique appele libpdf.so qui pointe vers libpdf.so.123 (commande ln, option -s, en root). Apres, ld devrait etre capable de travailler.

  5. #5
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par niouze
    DaZumba,

    Merci pour ta réponse rapide.
    J'ai lu me man de gcc et j'ai essayé ça aussi, (j'ai essayé un tas de truc tout le weekend en fait).

    avec les options -l et -L j'ai l'erreur :

    ld : file not found libpdf.so.1

    Veux-tu dire qu'avec l'option -l il ne faut pas donner le nom du fichier mais le nom de la bibliothèque ( sans le préfixe "lib" et l'extension ).
    Désolé pour mon niveau plus que débutant en gcc.

    Gis.
    Si on prend ce qu'a dit DaZumba,
    Lire la documentation de gcc. Pour lier une bibliotheque situee a /toto/titi/libtutu.a (ou .so), il faut donner les options -ltutu -L/toto/titi.
    Il faudrait que tu fasses:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -static -I../../pdflib/ hello.c  -lpdf -L/usr/lib
    Mais /usr/lib est inclu directement dans la recherche des .so donc, à mon avis,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -static -I../../pdflib/ hello.c  -lpdf
    suffira.

    Jc

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Par défaut
    Je vais essayer ça ce soir, je vous remercie pour votre aide.
    Gis.

  7. #7
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Merci pour le resume, fearyourself. Je me rend compte egalement que niouze utilise l'option -static, ce qui va forcer le lien avec la version statique de la bibliotheque, qui est libpdf.a. Si ce fichier n'existe pas, le lien va echouer. Donc, si niouze ne possede que la version 'shared object' (.so), il ne peut pas imposer -static.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Par défaut
    Voilà ça marche nickel merci pour le tuyau.
    Je vais verifier mais il me semble que j'ai compilé en static et que ça a fonctionné.
    J'ai tout de même du faire un lien de libpdf.so -> libpdf.so.1

    Si quelqu'un a 2 secondes pour m'expliquer pourquoi la plupart des librairies finissent par .so.1.x.x, j'aimerais savoir si je vais devoir faire un lien sur truc.so.1 a chaque fois que je veux compiler avec une librairie truc.so

    Gis.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Par défaut
    T'as raison DaZumba, j'ai compilé sans l'option -static, après tout ça marche et c'est moins lourd.

    Merci.
    Gis.

Discussions similaires

  1. les .a avec gcc
    Par Groove dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 31/03/2003, 07h59
  2. gcc et win32
    Par MatRem dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 16/01/2003, 12h22
  3. getch() avec gcc
    Par Jorus dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/12/2002, 14h47
  4. Réponses: 1
    Dernier message: 13/11/2002, 20h34
  5. [Kylix] gcc et kylix
    Par alexsmadja dans le forum EDI
    Réponses: 1
    Dernier message: 28/05/2002, 10h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo