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

Bibliothèques Discussion :

[PDCurses] Compilation statique via G++


Sujet :

Bibliothèques

  1. #1
    Futur Membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [PDCurses] Compilation statique via G++
    Bonjour à tous amis développeurs

    Pour faire simple, je suis sous Win7 et Code::Blocks, et je me lance sur un projet console en c++ avec la bibliothèque PDCurses (ayant abandonné notre cher et vieux Conio au profit de quelque chose de plus portable :p).

    Mais voilà, je me retrouve face à un petit problème, mais assez gênant tout de même : je n'arrive pas à compiler une simple appli "Hello world" en statique (dll manquante à l’exécution ). En dynamique avec cette fameuse dll, ça tourne impec.

    Je précise que j'ai récupéré le zip de la v3.4 de PDCurses, et théoriquement je devrais pouvoir lier mon PDCurses.lib en statique. Mais la dll est toujours réclamée (en exécutant depuis l'explorer) .

    Je ne connais pas C::B dans les détails, mais je suis sur d'avoir omis des paramètres fondamentaux...

    Quelqu'un aurait-il une idée ? Par avance je vous remercie.

    Cordialement,

    informatiman

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Toujours (sous Windows), il faudra une DLL lorsque vous utilisez une bibliothèque sous forme de .lib (ou .so).
    Il faut compiler en statique pour avoir la bibliothèque directement dans le programme (pour ça, il faut inclure le .a, je pense).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Futur Membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse

    Que veux tu dire exactement ? Que même en liant le .lib et en précisant l'option -static au gcc, il me faudra tout de même la .dll ?

    Ce qui sous-entendrai qu'il me faudrait les sources de PDCurses compilées en statique pour avoir le fichier PDCurses.a et ensuite pouvoir le lier à mon projet directement, si je comprends bien ?

    Cordialement,

    informatiman

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Je pense que l'option -static ne suffit pas. Il faut les .a aussi et s'il ne sont pas dans l'archive de base, alors il faudra recompiler.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Futur Membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Alors j'ai eu les sources de PDCurses, et j'ai compilé pour win32 avec l'appli mingw32-make et le makefile pour MinGW, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mingw32-make -f mingwin32.mak
    Dans le dossier win32, j'ai bien un fichier pdcurses.a et panel.a qui ont été créé, que j'ai link en chemin direct à mon projet sous C::B.

    Mais la compile échoue avec un undefined reference to '_imp__stdsrc'

    Je ne comprends pas, j'ai bien clean et rebuild le mini projet, mais ça passe pas...

    Une petite idée ?

  6. #6
    Futur Membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Visiblement ça serait le getch() qui provoquerait cette erreur de compilation. Voici le main.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <curses.h>
     
    int main()
    {	
    	initscr();			/* Start curses mode 		  */
    	printw("Hello World !!!");	/* Print Hello World		  */
    	refresh();			/* Print it on to the real screen */
    	getch();			/* Wait for user input */
    	endwin();			/* End curses mode		  */
     
    	return 0;
    }
    Mon PDCurses.a serait-il inadapté ? Faudrait-il spécifier certains paramètres dans le makefile (fourni d'origine pour win32/MINGW) et recompiler pour sortir un fichier.a correct ?

    En dynamique le même code fonctionne (en linkant le PDCurses.lib)

    Une petite idée ?

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Surement un problème de configuration, mais de là à le trouver ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Futur Membre du Club
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Voici le mingwin32.mak (makefile) si ça peut aider, moi je ne vois pas se que je peux retoucher de plus par raport à cet original :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    # GNU MAKE Makefile for PDCurses library - WIN32 MinGW GCC
    #
    # Usage: make -f [path\]mingwin32.mak [DEBUG=Y] [DLL=Y] [WIDE=Y] [UTF8=Y] [tgt]
    #
    # where tgt can be any of:
    # [all|demos|pdcurses.a|testcurs.exe...]
     
    O = o
     
    ifndef PDCURSES_SRCDIR
    	PDCURSES_SRCDIR = ..
    endif
     
    include $(PDCURSES_SRCDIR)/version.mif
    include $(PDCURSES_SRCDIR)/libobjs.mif
     
    osdir		= $(PDCURSES_SRCDIR)/win32
     
    PDCURSES_WIN_H	= $(osdir)/pdcwin.h
     
    CC		= gcc
     
    ifeq ($(DEBUG),Y)
    	CFLAGS  = -g -Wall -DPDCDEBUG
    	LDFLAGS = -g
    else
    	CFLAGS  = -O2 -Wall 
    	LDFLAGS = 
    endif
     
    CFLAGS += -I$(PDCURSES_SRCDIR)
     
    BASEDEF		= $(PDCURSES_SRCDIR)\exp-base.def
    WIDEDEF		= $(PDCURSES_SRCDIR)\exp-wide.def
     
    DEFDEPS		= $(BASEDEF)
     
    ifeq ($(WIDE),Y)
    	CFLAGS += -DPDC_WIDE
    	DEFDEPS += $(WIDEDEF)
    endif
     
    ifeq ($(UTF8),Y)
    	CFLAGS += -DPDC_FORCE_UTF8
    endif
     
    DEFFILE		= pdcurses.def
     
    LINK		= gcc
     
    ifeq ($(DLL),Y)
    	CFLAGS += -DPDC_DLL_BUILD
    	LIBEXE = gcc $(DEFFILE)
    	LIBFLAGS = -Wl,--out-implib,pdcurses.a -shared -o
    	LIBCURSES = pdcurses.dll
    	LIBDEPS = $(LIBOBJS) $(PDCOBJS) $(DEFFILE)
    	CLEAN = $(LIBCURSES) *.a $(DEFFILE)
    else
    	LIBEXE = ar
    	LIBFLAGS = rcv
    	LIBCURSES = pdcurses.a
    	LIBDEPS = $(LIBOBJS) $(PDCOBJS)
    	CLEAN = *.a
    endif
     
    .PHONY: all libs clean demos dist
     
    all:	libs demos
     
    libs:	$(LIBCURSES)
     
    clean:
    	-del *.o
    	-del *.exe
    	-del $(CLEAN)
     
    demos:	$(DEMOS)
    	strip *.exe
     
    $(DEFFILE): $(DEFDEPS)
    	echo LIBRARY pdcurses > $@
    	echo EXPORTS >> $@
    	type $(BASEDEF) >> $@
    ifeq ($(WIDE),Y)
    	type $(WIDEDEF) >> $@
    endif
     
    $(LIBCURSES) : $(LIBDEPS)
    	$(LIBEXE) $(LIBFLAGS) $@ $?
    	-copy pdcurses.a panel.a
     
    $(LIBOBJS) $(PDCOBJS) : $(PDCURSES_HEADERS)
    $(PDCOBJS) : $(PDCURSES_WIN_H)
    $(DEMOS) : $(PDCURSES_CURSES_H) $(LIBCURSES)
    panel.o : $(PANEL_HEADER)
    terminfo.o: $(TERM_HEADER)
     
    $(LIBOBJS) : %.o: $(srcdir)/%.c
    	$(CC) -c $(CFLAGS) $<
     
    $(PDCOBJS) : %.o: $(osdir)/%.c
    	$(CC) -c $(CFLAGS) $<
     
    firework.exe newdemo.exe rain.exe testcurs.exe worm.exe xmas.exe \
    ptest.exe: %.exe: $(demodir)/%.c
    	$(CC) $(CFLAGS) -o$@ $< $(LIBCURSES)
     
    tuidemo.exe: tuidemo.o tui.o
    	$(LINK) $(LDFLAGS) -o$@ tuidemo.o tui.o $(LIBCURSES)
     
    tui.o: $(demodir)/tui.c $(demodir)/tui.h $(PDCURSES_CURSES_H)
    	$(CC) -c $(CFLAGS) -I$(demodir) -o$@ $<
     
    tuidemo.o: $(demodir)/tuidemo.c $(PDCURSES_CURSES_H)
    	$(CC) -c $(CFLAGS) -I$(demodir) -o$@ $<
     
    PLATFORM1 = MinGW Win32
    PLATFORM2 = MinGW for Win32
    ARCNAME = pdc$(VER)_ming_w32
     
    include $(PDCURSES_SRCDIR)/makedist.mif
    Peut être spécifier un module par rapport a getch() ? Forcer le module ar à implanter certains fichiers ?

Discussions similaires

  1. Réponses: 15
    Dernier message: 20/03/2008, 09h33
  2. compilation IL via ILASM etILDASM
    Par Goldenkiller dans le forum Framework .NET
    Réponses: 6
    Dernier message: 08/02/2008, 09h57
  3. [PRO*C] compilation statique oracle 10g
    Par methosxp dans le forum Interfaces de programmation
    Réponses: 0
    Dernier message: 14/09/2007, 17h59
  4. compiler directement via ld
    Par minirop dans le forum C
    Réponses: 14
    Dernier message: 09/04/2007, 21h02
  5. Réponses: 7
    Dernier message: 11/01/2006, 16h55

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