Page 1 sur 1

Défaut linker après compilation en 32 bits

Publié : 06 juillet 2017, 10:30
par garo
Bonjour,

Sous CentOS7, j'essaye de compiler et linker une application 32 bits que j'avais écris sous CentOS6-32 bits/Eclipse-Helios/
La compilation se passe très bien en utilisant l'option -m32.
Par contre j'ai une erreur lors de la phase du linker.

/usr/bin/ld: architecture i386 du fichier d'entrée « main.o » est incompatible avec la sortie i386:x86-64
/usr/bin/ld: architecture i386 du fichier d'entrée « serial.o » est incompatible avec la sortie i386:x86-64
[....]
idem pour tous les fichiers du projet (ceux qui ont été définis dans le fichier "fileslist.mkf" de mon makefile (cf. ci-dessous).

Coppie de mon fichier makefile:

CC = g++
CPP = g++
APPNAME = blackBox

include ./fileslist.mkf

# GCC options
OPTIONS = -O0 -g3 -Wall -lrt -pthread

# Link des fichiers objets
$(APPNAME) : $(OBJS) $(HEADERS)
$(CC) $(OPTIONS) -Xlinker -Map -Xlinker $(APPNAME).map -o $@ $(OBJS)

# Compilation des fichiers .c
%.o: %.c $(HEADERS)
$(CC) $(OPTIONS) -c -m32 $< -o $@

# Compilation des fichiers .cpp
%.o: %.cpp $(HEADERS)
$(CPP) $(OPTIONS) -c -m32 $< -o $@

clean :
rm *.o blackBox

J'ai essayé avec la même option "-m32" pour la phase linker. Ca ne fonctionne pas.
Je pense qu'il faut effectivement lui dire de linker en 32 bits mais je n'ai pas trouvé cette option.
Attention, je n'utilise pas la commande "ld" mais "g++" avec l'option -Xlinker, donc l'option -m elf_i686 n'est pas reconnue non plus.
Bien entendu, si je reste en 64 bits, mon logiciel est compilé et linké parfaitement.
J'ai aussi pris soins, a chaque fois, de bien effacer tous les fichiers objets.

Merci pour votre aide.
Garo.

Re: Défaut linker après compilation en 32 bits

Publié : 07 juillet 2017, 23:34
par Beta-Pictoris
As tu essayé avec les variables suivantes ? :

Code : Tout sélectionner

CXXFLAGS=-m32
LDFLAGS=-m32
Pour le langage C, on peut, aussi, utiliser la variable CFLAGS.

As tu installé les paquets suivants ? :

Code : Tout sélectionner

glibc-devel.i686
libstdc++-devel.i686 

Re: Défaut linker après compilation en 32 bits

Publié : 11 juillet 2017, 13:58
par garo
Bonjour Beta-Pictoris,

Merci pour ta réponse.

Non je n'ai pas essayé ces deux variables, par contre j'ai bien installé les lib (enfin... normalement ;) )
Je vais essayer et je te tiens au courant; mais pas tout de suite car je suis sur un autre projet.
Ces variables tu les déclares dans le makefile je suppose ?

A+
Garo.

Re: Défaut linker après compilation en 32 bits

Publié : 11 juillet 2017, 14:45
par remi
Question con, quel intérêt de vouloir compiler en 32 bits ?
Passe en 64 bits, bienvenu au XXIème siècle.

Re: Défaut linker après compilation en 32 bits

Publié : 11 juillet 2017, 16:32
par garo
Salut Rémi,

Ma cible est en 32 bits pour le moment mais effectivement c'est prévu de basculer en 64 bits.
D'ailleurs mon code est aussi compilable en 64 bits et il fonctionne parfaitement.
En fait, je viens de changer de VM et je suis passé sur CentOS7.
Le projet a été créé sous CentOS6.9 - 32 bits.
Je souhaite m'assurer que l'application 64 bits fonctionne comme la version du siècle dernier ;)

Garo.

Re: Défaut linker après compilation en 32 bits

Publié : 11 juillet 2017, 16:40
par garo
Pour Beta-Pictoris, je viens de percuter...

Les deux variables que tu m'a indiqué sont bien incluses dans mes lignes de mon makefile (cf. mon premier post).
Donc pour te répondre positivement, oui les tests ont été fait avec ces deux options de compilation/linkage.

Cordialement.
Garo.

Re: Défaut linker après compilation en 32 bits

Publié : 11 juillet 2017, 16:55
par garo
Beta-Pictoris avait raison, merci.

Il manquait, en fait, uniquement libstdc++-devel.i686.
J'en avait installé qu'une sur les deux nécessaires.
De plus dans ma ligne de link, il manquait aussi l'option -m32.

Merci pour votre aide.
Garo