Défaut linker après compilation en 32 bits

garo
Messages : 5
Inscription : 06 juillet 2017, 09:59

Défaut linker après compilation en 32 bits

Message par garo » 06 juillet 2017, 10:30

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.

Beta-Pictoris
Messages : 989
Inscription : 07 janvier 2014, 21:48
Localisation : Angers, France

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

Message par Beta-Pictoris » 07 juillet 2017, 23:34

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 

garo
Messages : 5
Inscription : 06 juillet 2017, 09:59

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

Message par garo » 11 juillet 2017, 13:58

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.

Avatar de l’utilisateur
remi
Messages : 214
Inscription : 20 octobre 2009, 07:10
Localisation : Champagne...
Contact :

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

Message par remi » 11 juillet 2017, 14:45

Question con, quel intérêt de vouloir compiler en 32 bits ?
Passe en 64 bits, bienvenu au XXIème siècle.
Contributeur EPEL et CentOS SCLo SIG
Des RPM pour CentOS sur https://rpms.remirepo.net

garo
Messages : 5
Inscription : 06 juillet 2017, 09:59

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

Message par garo » 11 juillet 2017, 16:32

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.

garo
Messages : 5
Inscription : 06 juillet 2017, 09:59

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

Message par garo » 11 juillet 2017, 16:40

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.

garo
Messages : 5
Inscription : 06 juillet 2017, 09:59

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

Message par garo » 11 juillet 2017, 16:55

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

Répondre