Connexion
Vous n'avez pas encore de compte personnel ? Vous devriez en créer un. Une fois enregistré vous aurez certains avantages, comme pouvoir modifier l'aspect du site, ou poster des commentaires signés...
Support
Activité du Site

Pages vues depuis 06/01/2019 : 13 376 761

  • Nb. de membres 368
  • Nb. d'articles 2 854
  • Nb. de forums 24
  • Nb. de sujets 13
  • Nb. de critiques 0

Top 10  Statistiques

Index du forum »»  Développement »» FTGL & Freetype dans un .a

FTGL & Freetype dans un .a#1107

2Contributeur(s)
AmiDARKYomgui
2 Modérateur(s)
PapiosaurBeWorld
AmiDARK AmiDARKicon_post
Bonjour,

J'utilise FTGL (et donc FreeType) dans l'AmiDARK Engine pour certaines fonctions liées aux "Textes".
Donc pour cela, j'inclut bien le <<#!!include!! "FTGL/FTGL.h">> dans mes !!include!!s de ma librairie
Dans la compilation j'ai bien en librairies : -lftgl -lfreetype -lGL -lGLU -lGLUT
L'AmiDARK Engine compile sans erreur. La librairie .a est créee.

Maintenant, je prends ma librairie libamidark.a je l'installe ainsi que ses fichiers de définition.
de ses fichiers de définition, j'inclut le : <<#!!include!! "FTGL/FTGL.h">>.

Dans la compilation de mon programme d'exemple qui utilise l'AmiDARK Engine, j'inclut bien : -lAmiDARK -lftgl -lfreetype -lGL -lGLU -lGLUT.
Je compile et là ... il me dit :
"linker input file unused since linking not done"
puis dans mes fonctions textes de la librairie libAmiDARK.a il me donne plusieurs :
" [Linker Error] undefined reference to 'ftglCreatePixmapFont' " avec les noms de fonctions de la FTGL que j'utilise.

Ce qui m'inquiète c'est que exactement la même procédure pour AmigaOS4 (création de la librairie .a et compilation d'un programme utilisant la librairie .a) fonctionne parfaitement et que mes exemples tournent niquel sur AmigaOS4...
J'aimerais comprendre ...

Je joins les 2 make file :
Création de la librairie .a :

CPP       = ppc-morphos-g++.exe
CC        = ppc-morphos-gcc.exe
AR        = AR.exe
WINDRES   = windres.exe
LIBS      = -L"C:/AmiDevCpp/usr/local/amiga/ppc-morphos/lib"  
INCS      = -I"C:/AmiDevCpp/usr/local/amiga/ppc-morphos/!!include!!"
CXXINCS   = -I"C:/AmiDevCpp/usr/local/amiga/ppc-morphos/!!include!!"
RCINCS    = --!!include!!-dir "C:/AMIDEV~1/!!include!!"
BIN       = FlyingFeather.exe
DEFINES   = 
CXXFLAGS  = $(CXXINCS)  
OPTIMIZE = -O3
LIBS      = -lftgl -lfreetype -lGL -lGLU -lGLUT
CFLAGS    = $(OPTIMIZE) 
GPROF     = gprof.exe
RM        = rm -f
LINK      = ppc-morphos-gcc.exe
CP        = copy
STRIP     = strip
SRCS      = libAmiDARK.c
TARGET    = libAmiDARK.a
OBJS      = $(SRCS:.c=.o)

# Rules for building
all: $(TARGET)

$(TARGET): $(OBJS)
    $(AR) rc $@ $^


.PHONY: clean
clean:
    $(RM) $(TARGET) $(TARGET).o $(OBJS)



Compilation de la démo utilisant la librairie .a :

CPP       = ppc-morphos-g++.exe
CC        = ppc-morphos-gcc.exe
OBJ       = BoingBall.o
LINKOBJ   = BoingBall.o
LIBS      = -L"C:/AmiDevCpp/usr/local/amiga/ppc-morphos/lib"  
INCS      = -I"C:/AmiDevCpp/usr/local/amiga/ppc-morphos/!!include!!"
CXXINCS   = -I"C:/AmiDevCpp/usr/local/amiga/ppc-morphos/!!include!!"
RCINCS    = --!!include!!-dir "C:/AMIDEV~1/!!include!!"
BIN       = BoingBall.exe
DEFINES   = 
CXXFLAGS  = $(CXXINCS)  
OPTIMIZE = -O3
CFLAGS    = $(INCS) $(OPTIMIZE) -lTinyGL
RM        = rm -f
LINK      = ppc-morphos-gcc.exe
CP        = copy
STRIP     = strip

.PHONY: all all-before all-after clean clean-custom
all: all-before $(BIN) all-after

clean: clean-custom
    $(RM) $(OBJ) $(BIN)

$(BIN): $(OBJ)
    $(LINK) $(LINKOBJ) -o "BoingBall.exe" -noixemul -lAmiDARK -lGLUT -lGLU -lGL -ldebug
    $(RM) $(OBJ)

BoingBall.o: $(GLOBALDEPS) BoingBall.c
    $(CC) -c BoingBall.c -o BoingBall.o $(CFLAGS)



J'ai aussi essayé, dans les 2 makefile, de remplacer le linker par : LINK = ppc-morphos-g++.exe
Car j'ai lu sur le net que FTGL était pour du C++ et que en C fallait utiliser g++ pour la compiler mais, j'obtiens exactement le même résultat...

Si quelqu'un y voit une ou plusieurs erreurs, merci de m'aider.

@+
AmiDARK
Yomgui Yomguiicon_post
Déjà si tu fais une bibliothèque statique (libtoto.a) tu n'as pas à passer d'autres bibliothèques statiques (-lbidule),
puisque la génération du .a ce fait avec "ar" qui n'effectue aucune opération de link.
D'où ton message de link.

Ensuite tu peux utiliser l'option -t avec gcc quand tu génères l'exécutable pour savoir les fichiers qui sont ouvert (avec les chemins) pour t'assurer que tout est correct.

Finalement tu as oublié la lib ftgl et freetype pour linker ton binaire

$(LINK) $(LINKOBJ) -o "BoingBall.exe" -noixemul -lAmiDARK -lGLUT -lGLU -l GL -ldebug

il manque -lftgl -lfreetype

voilà le problème

Sinon c'est quoi ce .exe pour gcc morphos?
AmiDARK AmiDARKicon_post
Excuse Yomgui.
Le copier/coller contenant un test ou j'ai supprimé -lftgl et -lfreetype.
Mais même avec les 2 ... ça ne fonctionne pas plus ... même message d'erreur !!!

l'exe c'est un programme en C qui utilise ma librairie libamidark.a :p

par contre .. -t ou pas -t aucune différence, aucune informations supplémentaire dans AmiDevCPP.
Par contre petit détail, dans la compilation ça génère le .o mais pas le .exe à cause des erreurs ...
Yomgui Yomguiicon_post
Pour le ".exe" je parlais de celui après ppc-morphos-gcc. Il n'y a que sur Windows qu'on utilise cela.
Mais je vois que tu cross-compile avec AmiDevCPP, donc voilà certainement la raison.

Ton erreur de fontions manquantes, c'est bien quand tu link "BoingBall.exe"?
Si oui et si tu mets bien les -l qu'il faut alors c'est que tes libs statiques ne contiennent pas ces symboles.
elles sont certainement cassées.

tu peux regarder le contenu avec la commande:

pcc-morphos-nm -Ag libftgl.a
AmiDARK AmiDARKicon_post
le .exe fait partie du nome des fichiers executables sous PC (AmiDevCPP oublie pas ;) )

Oui c'est bien sur mon boingball.
Ok je vais zieuter ca avec l'Efika pour voir si il y a bien les fonctions.
si je fais un HEX read des .a sur PC j'y verrais les fonctions aussi ?

@+
AmiDARK
Yomgui Yomguiicon_post
Non non non... n'invente pas la roue: utilise nm c'est fait pour cela.
Tu vois direct ce qui est exporté par ton archive (.a)
AmiDARK AmiDARKicon_post
nm ça existe sur PC ?
Bon effectivement ça existe...

J'ai réussi après maint tests à compiler une pseudo libftgl.a (environ 390kb) cependant les noms de fonctions utilisent le principe des PC ... avec __... avant le nom genre __ZNK7FTLayout au lieu de FTLayout ..
Et là .. je sais vraiment pas comment faire pour supprimer tout ça ...

@+