Aide - Recherche - Membres - Calendrier
Version complète : [RESOLU pour le moment] Application multi-segments sous PODS
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Fredouille.95
Bonjour,

J'ai enfin décider de me lancer dans le développement sous Palm OS en utilisant Palm OS Developer Suite à jour.
Je suis en train de porter un logiciel, originellement écrit pour être compilé sous PC.

Il m'a fallu créer plusieurs segments.
Pour le code, cela fonctionne.
Par contre, mon code fais référence à une variable défini dans un autre fichier dont le code se trouve dans une autre section et ce, malgré la référence explicite en utilisant extern.

Et là, l'outil me sort l'erreur suivante.

m68k-palmos-gcc -g -o cpcemu src/AppMain.o src/cpc.o src/z80.o src/z80inst.o multiple_code_sections.o multiple_code_sections.ld
src/z80inst.o(z80inst+0x10): In function `adc_a':
z80inst.c:722: undefined reference to `z80'
src/z80inst.o(z80inst+0x26):z80inst.c: undefined reference to `z80'

Pourtant, la variable "z80" est bien déclaré dans le fichier "c" en utilisant extern.

Ma question est la suivante : Le partitionnement du code en segments influe-t-il sur l'accès aux variables globales ??

J'espère avoir été suffisamment clair !!

Merci
Patrice
Je ne connais pas les spécificité de PODS, mais, au cas où, je te signale une limitation du multi-segements : les données (donc les variables globales) ne peuvent être présentes (et utilisées) que dans le segment principal.

Si ta déclaration de sous-segment se fait au niveau d'un fichier source complet (ce qui n'est pas le cas avec gcc), il est possible que les globales soient aussi affectées au segment et se retrouve de ce fait inconnue...
Fredouille.95
Merci de ta réponse.

Pour le peu que j'en ai vu, j'affecte explicitement une section à une fonction.
Ce que je fais en rajoutant le nom de la section au prototype de la fonction dans le header.

C'est déjà trés dur d'avoir des infos sur la multi-segmentation du code, mais alors pour les variables...

Je vais encore chercher...
Patrice
Dans ce cas, c'est comme gcc et les segments n'ont auucne influence sur les données. Et tu dois chercher ailleurs (par exemple : le module où est déclarée la variable, pour de bon, sans "extern", est-il bien linké avec le reste ?)
Fredouille.95
sous PODS, il est difficile de savoir vraiment ce qu'il se passe au niveau du linker...

Par exemple, pour avoir plusieurs segments, il suffit de rajouter un fichier .def bien placé et hop, ça tourne (je ne parle pas du header avec __attribute__).

Bref, j'ai résolu mon problème d'une manière que je ne comprends pas, et je n'aime pas ça.

Comme je débute, j'ai fait plutôt compliqué. Alors j'ai simplifié et ça à l'air de tourner.
Bref, pour utiliser plusieurs segments, j'ai utilisé plusieurs fichiers source (.c) 1 par segment. Avec comme include le header du fichier contenant les déclarations des variables globales.
Et ça plantait.
Alors, j'ai eu l'illumination et j'ai tout ramener dans un seul fichier et j'ai juste modifié l'affectation des segments dans le header. Je ne sais pas si c'est compréhensible mais c'est à l'air de tourner et le linker me génère un prc. Donc, il est content icon_biggrin.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.