El-B@rto
Heureux papa :)
Messages : 1 046 Inscrit le 13/01/03
Ville : Lyon
Non connecté
|
|
Posté le 14 mars 2005 - 16 h 37 m 10 s |
|
|
Salut a tous
Tout d'abord j'ai des competences tres tres limitées sous Linux.
Je dois (dans le cadre d'un projet d'etude) faire un programme en c que je dois compiler linker etc... pour le transformer en un fichier "rom.bin", le tout sur cygwin.
En fait nous avons deja testé cette manip avec un exemple "simple.c" et un makefile qui nous transformait ce fichier simple.c en image.elf puis rom.bin.
Nous avons essayé de modifier ce makefile pour notre application, mais nous obtenons une erreur:
collect2: ld returned 1 exit status
et des "undefined reference to HSSend" (HSSend etant une fonction appartenant a la librairie hservapi.h, cette librairie etant signalée en debut de chaque .c avec la directive "#include"
Comment faire pour obtenir ce fichier rom.bin et image.elf?
Merci d'avance
|
|
| |
Cherche tout sur final fantasy et simpsons (figurine, jeux, bouquins ...) ==> mp
Cherche vitrine (ben oui faut bien les ranger les figurines ...)
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 14 mars 2005 - 17 h 18 m 41 s |
|
|
Pour le moment ca n'a rien a voir avec Cygwin que j'utilise .. regarde du cote de ce qui manque !!
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 420 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 14 mars 2005 - 18 h 12 m 27 s |
|
|
Le 14 mars 2005 - 16 h 37, El-B@rto a écrit :
Salut a tous
Tout d'abord j'ai des competences tres tres limitées sous Linux.
Je dois (dans le cadre d'un projet d'etude) faire un programme en c que je dois compiler linker etc... pour le transformer en un fichier "rom.bin", le tout sur cygwin.
En fait nous avons deja testé cette manip avec un exemple "simple.c" et un makefile qui nous transformait ce fichier simple.c en image.elf puis rom.bin.
Nous avons essayé de modifier ce makefile pour notre application, mais nous obtenons une erreur:
collect2: ld returned 1 exit status
et des "undefined reference to HSSend" (HSSend etant une fonction appartenant a la librairie hservapi.h, cette librairie etant signalée en debut de chaque .c avec la directive "#include"
Comment faire pour obtenir ce fichier rom.bin et image.elf?
Merci d'avance 
|
 c'est pas une "librairie" qui est signalée avec #include mais un fichier d'en-tête, autrement appelé ".h". Tu peux compiler sans problème si tu as le ".h", mais c'est le linker qui te dit qu'il ne trouve pas la lib correspondante (.so ou .a)
Compiler et linker sont deux choses différentes. Regarde plutôt ou se trouve ta lib, il y a peut-être un problème de chemin ?
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
nigaiden
Messages : 514 Inscrit le 31/12/02
Ville : Lyon
Non connecté
|
|
Posté le 15 mars 2005 - 09 h 06 m 15 s |
|
|
Moi je pense qu'il doit manquer quelque chose comme "-lhserv" dans le Makefile pour indiquer à l'éditeur de liens de lier cette bibliothèque au programme.
Demande à ton prof le nom exact de la bibliothèque.
|
|
| |
|
El-B@rto
Heureux papa :)
Messages : 1 046 Inscrit le 13/01/03
Ville : Lyon
Non connecté
|
|
Posté le 15 mars 2005 - 14 h 50 m 54 s |
|
|
Merci pour vos reponses, mais ca ne m'a pas aidé a résoudre mon pb  donc je vous joinds le makefile:
[quote]
#Tools setup
include ./../../../../toolsdef.mak
# NETOS setup
NETOS_LIBPATH= ./../../../../lib/32b
NETOS_CLIBPATH=./../../../../lib/32b/gnu
STARTFILE=$(OBJDIR)/init.o
# $(NETOS_CLIBPATH)/crtbegin.o \
# $(NETOS_CLIBPATH)/crtend.o
NETOS_BIN=./../../../../bin
COMPRESS=$(NETOS_BIN)/compress
BOOTHDR=$(NETOS_BIN)/boothdr
BIN2OBJ=$(NETOS_BIN)/bin2obj
# debug flag
DEBUG_FLAG= -g
# C Warning level
# base compiler options
BASECFLAG=-mbig-endian -mcpu=arm7tdmi
# defines/undefines
DEF= -D__GNU__ -DNETOS_GNU_TOOLS -DNET_OS -DNET_WORKS -D_POSIX_SOURCE
ASDEF=--defsym __GNU__=1 --defsym NETOS_GNU_TOOLS=1 --defsym NET_OS=1 --defsym NET_WORKS=1 --defsym _POSIX_SOURCE=1
# final C compiler options
CCFLAGS=$(DEBUG_FLAG) $(BASECFLAG) $(DEF)
# search path for source header file
INC= -I./.. -I./../../../../h -I./../../../../h/threadx -I./../../../../h/tcpip -I./../pbuilder\
-I./../../../rphttpd -I./../../../bsp/customize -I./../../../bsp
# assembler
ASFLAG= -EB
# search path(s) for source file or library
BSP_DIRECTORY=./../../../bsp
SOURCE_DIRECTORY=./..
CUSTOMIZE_DIRECTORY=./../../../bsp/customize
# search path(s) for source file or library
VPATH= $(SOURCE_DIRECTORY):$(BSP_DIRECTORY):$(CUSTOMIZE_DIRECTORY)
# directory to store obj files
OBJDIR=./objs
# objects to be linked
OBJECTS=$(OBJDIR)/_Index.o _Bp.o _Led.o bindata.o url.o
# source file directories
CFILES=$(SOURCE_DIRECTORY)/_Index.c
CFILES=$(SOURCE_DIRECTORY)/_Bp.c
CFILES=$(SOURCE_DIRECTORY)/_Led.c
CFILES=$(SOURCE_DIRECTORY)/url.c
CFILES=$(SOURCE_DIRECTORY)/bindata.c
# linker options
LINKOPT= -mbig-endian -nostartfiles
# linker command file
LINK_CMD=./../image.ld
ROM_LINK_CMD=./../rom.ld
# Header config file
HEADER_CONFIG=./../../../linkerscripts/bootldr.dat
# output file name(s)
ROM=rom.elf
ROMBIN=rom.bin
SYMFILE=image.sym
MAPFILE=image.map
ROMSYMFILE=rom.sym
ROMMAPFILE=rom.map
DEBUG_VERSION=image.elf
UNCOMPRESSED_IMAGE=uncompressed.bin
COMPRESSED_IMAGE=imagezip.bin
IMAGE_WITH_HEADER=image.bin
DEPEND=depend.mk
# goal(s)
all: $(OBJDIR) $(IMAGE_WITH_HEADER) $(ROMBIN)
image: $(OBJDIR) $(IMAGE_WITH_HEADER)
# rules begins
$(OBJDIR)/%.o: %.c
$(CC) -c $(INC) $(CCFLAGS) $< -o $@
$(OBJDIR)/%.o: %.s
$(AS) $(ASFLAG) $(ASDEF) $< -o $@
$(DEBUG_VERSION): $(OBJECTS) $(LINK_CMD) $(LIBS)
$(CC) -o $(DEBUG_VERSION) $(OBJECTS) $(LINKOPT) -T $(LINK_CMD) $(NETOS_LIBS) -Wl,-Map,$(MAPFILE)
$(NM) -n $(DEBUG_VERSION) > $(SYMFILE)
# $(RM) $(UNCOMPRESSED_IMAGE)
$(IMAGE_WITH_HEADER): $(DEBUG_VERSION)
$(OBJCOPY) -Obinary $(DEBUG_VERSION) $(UNCOMPRESSED_IMAGE)
$(COMPRESS) $(UNCOMPRESSED_IMAGE) $(COMPRESSED_IMAGE)
$(BOOTHDR) $(HEADER_CONFIG) $(COMPRESSED_IMAGE) $(IMAGE_WITH_HEADER)
$(RM) $(COMPRESSED_IMAGE)
$(ROM): $(OBJECTS) $(ROM_LINK_CMD) $(LIBS) $(STARTFILE)
$(CC) -o $(ROM) $(STARTFILE) $(OBJECTS) $(LINKOPT) -T $(ROM_LINK_CMD) $(NETOS_LIBS) -Wl,-Map,$(ROMMAPFILE)
$(NM) -n $(ROM) > $(ROMSYMFILE)
$(ROMBIN): $(ROM)
$(OBJCOPY) -O binary $(ROM) $(ROMBIN)
# clean up
clean:
rm -f $(OBJDIR)/*.o $(OBJDIR)/*.d $(OBJDIR)/*.elf $(OBJDIR)/*.out $(OBJDIR)/*.lst\
$(OBJDIR)/*.cmd ./*.elf ./*.bin ./*.sym ./*.map
rm -f $(ZOBJDIR)/*.o $(ZOBJDIR)/*.d $(ZOBJDIR)/*.elf $(ZOBJDIR)/*.out $(ZOBJDIR)/*.lst\
$(ZOBJDIR)/*.cmd $(DEPEND)
# make object directory
.PHONY: $(OBJDIR)
$(OBJDIR):
mkdir -p $(OBJDIR)
.PHONY: $(ZOBJDIR)
$(ZOBJDIR):
mkdir -p $(ZOBJDIR)
# generate dependencies
$(DEPEND): $(CFILES) Makefile
$(CC) $(INC) $(CCFLAGS) -M $(CFILES) > $(DEPEND)
$(OBJDIR)/init.o: init.S
# header dep.
-include $(DEPEND)
[/quote] |
Maintenant une des erreurs que nous avons avec ce makefile c'est qu'il ne trouve pas la librairie "libbsp.a" qui se trouve sur notre disque a c:\cygwin\usr\local\x-arm\arm-elf\
Ce que nous ne comprenons pas c'est qu'il demande l'emplacement de cette librairie alors qu'a aucun endroit du makefile elle n'est mentionnée...
Merci d'avance
|
|
| |
Message édité 1 fois, la dernière par El-B@rto le 15 mars 2005 - 14 h 52. |
| |
Cherche tout sur final fantasy et simpsons (figurine, jeux, bouquins ...) ==> mp
Cherche vitrine (ben oui faut bien les ranger les figurines ...)
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 420 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 15 mars 2005 - 16 h 15 m 13 s |
|
|
Je peux me tromper, mais dans ton source tu fais référence au fichier d'en-tête, donc tu dois certainement appeler des fonctions de cette bibliothèque, et le linker ne la trouve pas... C'est un ".a" : bibliothèque non dynamique si je me souviens bien. Donc pas appelée à l'exécution, mais incluse au link. Donc le linker pleure.
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
El-B@rto
Heureux papa :)
Messages : 1 046 Inscrit le 13/01/03
Ville : Lyon
Non connecté
|
|
|
| |
Cherche tout sur final fantasy et simpsons (figurine, jeux, bouquins ...) ==> mp
Cherche vitrine (ben oui faut bien les ranger les figurines ...)
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 420 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 16 mars 2005 - 07 h 58 m 47 s |
|
|
Comme le disait nigaiden, il doit falloir mettre -L c:/cygwin/xxxx pour indiquer au linker où se trouve la biblio. Désolé de pas t'aider plus, mais je suis loin d'être compétent en makefile
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 16 mars 2005 - 13 h 56 m 38 s |
|
|
Sous cygwin, fais man gcc et c'est un peu plus bas vers Linker Options et Directory Options ..
-L/cygdrive/c/path/to/your/lib -lbsp doivent etre les bonnes options ..
Tu suis le tuto de quel site la ? Et c'est pour faire la ROM de quel truc ?
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
El-B@rto
Heureux papa :)
Messages : 1 046 Inscrit le 13/01/03
Ville : Lyon
Non connecté
|
|
Posté le 16 mars 2005 - 14 h 33 m 03 s |
|
|
Le 16 mars 2005 - 13 h 56, iraysyvalo a écrit :
Sous cygwin, fais man gcc et c'est un peu plus bas vers Linker Options et Directory Options ..
-L/cygdrive/c/path/to/your/lib -lbsp doivent etre les bonnes options ..
Tu suis le tuto de quel site la ? Et c'est pour faire la ROM de quel truc ?
|
En fait ou placer cette ligne de commande ? Dans la section Linker Options ?
Nous avons reussi a regler notre probleme en copiant la librairie .a en question dans le dossier ou allait la chercher cygwin, mais nouveau probleme, les fonctions decrites dans le fichier d'entete hservapi.h (lequel nous avons bien signalé en #include au débute de chaque fichier .c) ne sont pas reconnues lors de la compilation et nous obtenons une erreur a chaque fois qu'une de ces lignes est compilée.
Autre question, quelle est la difference entre les fichiers.a et les fichiers.h ?
Et pour repondre a ta question iraysyvalo, nous ne suivons pas de tuto, en fait nousa vons un kit de developpement (unc20) avec une notice bidon, et un compilateur debuguer llinker qui fonctionnent sous cygwin (et pour nous c'est la premiere fois que nous utilisons un environnement Unix). Nous essayons de faire une ROM qui sera ensuite envoyée dans le microcontroleur de notre carte de developpement afin de tester notre application.
Merci pour votre aide
|
|
| |
Cherche tout sur final fantasy et simpsons (figurine, jeux, bouquins ...) ==> mp
Cherche vitrine (ben oui faut bien les ranger les figurines ...)
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 16 mars 2005 - 14 h 37 m 49 s |
|
|
Huh .. en fait, c'est meme pas gcc votre compilateur ?? T'as tronque le Makefile non ? Je ne vois pas quel est ton compilateur .. -> bon, je suppose que c'est gcc .. mais c'est un peu moche de se baser sur un $CC par defaut ..
|
|
| |
Message édité 1 fois, la dernière par iraysyvalo le 16 mars 2005 - 14 h 45. |
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|
bernie38
Waldorf (le pote à Statler)
Messages : 11 420 Inscrit le 28/08/03
Ville : Claix
Non connecté
|
|
Posté le 16 mars 2005 - 15 h 35 m 24 s |
|
|
Le 16 mars 2005 - 14 h 33, El-B@rto a écrit :
Autre question, quelle est la difference entre les fichiers.a et les fichiers.h ?
Merci pour votre aide 
|
Aïe  Tu n'as pas lu mon post un peu plus haut ?
Pour faire simpliste : le .h sert à la compil, c'est un fichier d'en_tête qui sert juste à t'éviter de recopier le contenu dans chaque source, en quelque sorte. Il contient généralement les signatures des fonctions.
Le .a ou le .so c'est la bibliothèque en binaire, c'est comme une dll si tu veux.
le .a c'est du statique (en gros, ça inclut la bib dans ton exécutable), le .so c'est du dynamique, ton exécutable n'inclut pas le contenu de la lib ; à l'exécution, lors de l'appel d'une fonction de cette bib ça appellera ce qu'il faut.
|
|
| |
La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire
|
El-B@rto
Heureux papa :)
Messages : 1 046 Inscrit le 13/01/03
Ville : Lyon
Non connecté
|
|
Posté le 16 mars 2005 - 20 h 34 m 03 s |
|
|
Le 16 mars 2005 - 14 h 37, iraysyvalo a écrit :
Huh .. en fait, c'est meme pas gcc votre compilateur ?? T'as tronque le Makefile non ? Je ne vois pas quel est ton compilateur .. -> bon, je suppose que c'est gcc .. mais c'est un peu moche de se baser sur un $CC par defaut ..
|
Si si, on a installé cygwin avec les soft suivants:
- Binutils v2.13.1
- Gcc v3.2.1
- Newlib v1.11.0
- Insight v5.1.1
Si tu veux je te file le getting started pour que tu comprennes mieux de quoi je parle
Le makefile je ne l'ai pas du tout tronqué j'ai juste remplacé les anciens noms de fichiers (ceux de l'exemple) par mes fichiers
==> c'est un peu moche de se baser sur un $CC par defaut ..
Vi surement mais c'est quoi
|
|
| |
Cherche tout sur final fantasy et simpsons (figurine, jeux, bouquins ...) ==> mp
Cherche vitrine (ben oui faut bien les ranger les figurines ...)
|
El-B@rto
Heureux papa :)
Messages : 1 046 Inscrit le 13/01/03
Ville : Lyon
Non connecté
|
|
Posté le 16 mars 2005 - 20 h 35 m 19 s |
|
|
Le 16 mars 2005 - 15 h 35, bernie38 a écrit :
Aïe Tu n'as pas lu mon post un peu plus haut ?
Pour faire simpliste : le .h sert à la compil, c'est un fichier d'en_tête qui sert juste à t'éviter de recopier le contenu dans chaque source, en quelque sorte. Il contient généralement les signatures des fonctions.
Le .a ou le .so c'est la bibliothèque en binaire, c'est comme une dll si tu veux.
le .a c'est du statique (en gros, ça inclut la bib dans ton exécutable), le .so c'est du dynamique, ton exécutable n'inclut pas le contenu de la lib ; à l'exécution, lors de l'appel d'une fonction de cette bib ça appellera ce qu'il faut.
|
Si si mais la c'est encore plus clair, merci, mainteant je vois la difference.
En tout cas encore merci pour votre aide, c'est sympa de donner un coup de main
|
|
| |
Cherche tout sur final fantasy et simpsons (figurine, jeux, bouquins ...) ==> mp
Cherche vitrine (ben oui faut bien les ranger les figurines ...)
|
iraysyvalo
-
Messages : 9 647 Inscrit le 19/11/02
Ville : Lyon
Non connecté
|
|
Posté le 16 mars 2005 - 20 h 40 m 06 s |
|
|
Quand tu ne specifies pas CC=gcc, make se base sur un compilateur par defaut, quant a savoir lequel ..
Par exemple, je ne vois pas non plus ce qu'est $NM .. Nasm ??
Fais une recherche Google sur Makefile .. ca te permettra de mieux comprendre comment c'est fait ..
|
|
| |
Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.
|