Compilation sur 2 machine

hello
Bon dificile de faire un titre qui tien la route:

Je me suis bricoller un soft. la compilation sous code block pas de problème aussi bien la relase ,que le debug.
l’application est de type console.

si je recupere le binaire ,que ce soie le relase , ou le debug

je le place sur le serveur dans :

les droit:

le message:

# /usr/local/bin/FiltreIpLog -bash: /usr/local/bin/FiltreIpLog : fichier binaire impossible à lancer

changement de la case … des fois que

/usr/local/bin/iiltreipLog

Donc si je résume :
les droit semble ok ?
l’exécuteur est root donc il a les droit.

je doit peux être le compiler en statique (mai je sai pas ou est ce que cela ce gère) ?

j’ai donc repris les source ,compiler sur le serveur avec un makefile et la pas de problème ???

[code]SRC=$(wildcard *.cpp)
#SRC=main.cpp
OBJ=${SRC:.cpp=.o}
OUT=main

CXX=c++
CXXFLAGS=-Wall -Wextra -pedantic
#CXXFLAGS=-lsqlite3 -Wall -Wextra -pedantic -static

all: $(OUT)

$(OUT): $(OBJ)
$(CXX) $^ -o $@ $(CXXFLAGS)

.cpp.o:

exe: all
./$(OUT) “sqlite3.sql”

clean:
@rm -v *.o
@rm -v ./main
true

mrproper: clean
@rm $(OUT)
[/code]

je ne sais pas si code blocks peux sortire un makefile, pour les comparers ?

sa va pas être pratique de compiler 2 fois le meme soft :frowning:

donc comment faire en sorte que ce qui est compiler sur ma machine ,soie valable sure le serveur ?
car le message d’erreur est pauvre, je sais vraiment pas ou chercher :cry:

Dis nous ce que te sors la commande :

[quote=“MisterFreez”]Dis nous ce que te sors la commande :

sur le serveur , mai la c est compiler dessus? (machine 32 bits)

ldd /usr/local/bin/Postfix 
	linux-gate.so.1 =>  (0xb78b7000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb77b5000)
	libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb778f000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7770000)
	libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7629000)
	/lib/ld-linux.so.2 (0xb78b8000)

la machine de dev (compiler avec le meme makefile p.s machine 64 bits

ldd ./main
	linux-vdso.so.1 =>  (0x00007fff93bff000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fd93ea81000)
	libm.so.6 => /lib/libm.so.6 (0x00007fd93e7ff000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fd93e5e8000)
	libc.so.6 => /lib/libc.so.6 (0x00007fd93e286000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd93edb3000)

[quote=“panthere”][quote=“MisterFreez”]Dis nous ce que te sors la commande :

sur le serveur , mai la c est compiler dessus? (machine 32 bits)

ldd /usr/local/bin/Postfix linux-gate.so.1 => (0xb78b7000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb77b5000) libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb778f000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7770000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7629000) /lib/ld-linux.so.2 (0xb78b8000) [/quote]
Je n’ai pas était très claire, c’est la version compilé sur la machine de dev, une fois qu’elle est placée sur la machine de prod.

J’ai une autre question les deux utilisent la même taille pour les adresses (32 ou 64bits) ?

[quote=“MisterFreez”]
Je n’ai pas était très claire, c’est la version compilé sur la machine de dev, une fois qu’elle est placée sur la machine de prod.

J’ai une autre question les deux utilisent la même taille pour les adresses (32 ou 64bits) ?[/quote]

alors j’ai compiler sure la machine 64 bit de dev --Envoiyer sur la machine 32 et j’ai executer ta commande:

ldd ./main
/usr/bin/ldd: line 161: /lib64/ld-linux-x86-64.so.2 : fichier binaire impossible à lancer
	 n'est pas un exécutable dynamique

pour la taille j’ai pas compris ?

Tout s’explique il faut cross-compiler. Je ne peux pas t’être d’un grand secours.

Les architectures 32 ou 64 bits, représentent la taille des adresses (des pointeurs en C).

[quote=“MisterFreez”]

Les architectures 32 ou 64 bits, représentent la taille des adresses (des pointeurs en C).[/quote]

Euh ?
en c++ c’est plutot des références bien que les pointeur soie possible, mai non j’utilise pas de pointeur, mai les lib de la STL peux surment s’en servir, si c est pas sa soi plus explicit.

ok je pige pour la compile , mai bon c est ch…

Merci pour ta réponse

[quote=“panthere”][quote=“MisterFreez”]

Les architectures 32 ou 64 bits, représentent la taille des adresses (des pointeurs en C).[/quote]

Euh ?
en c++ c’est plutot des références bien que les pointeur soie possible, mai non j’utilise pas de pointeur, mai les lib de la STL peux surment s’en servir, si c est pas sa soi plus explicit.[/quote]
Les adresses c’est les adresses que tu utilise des mécanismes ou non d’un langage, la manière d’adresser la mémoire de ton système d’exploitation se fait toujours à partir d’adresse de la mémoire. J’avoue ne pas être totalement au fait pour le C++, mais c’est en principe une adresse mémoire plus facilement manipulable.

De manière plus bas niveau, les programmes 64bits utilisent des registres de processeurs plus grands (64bits) qui n’existent pas pour l’architecture 32bits. C’est pour ça que la problématique 32/64bits existe pour tout les langages compilés nativement (C, C++, ADA, etc). Pour les langages de plus haut niveau (python, perl, ruby, Java,…), c’est l’interpréteur/la machine virtuelle qui gère la mémoire donc celle-ci doit être compilée pour l’architecture cible, mais les programmes, eux, sont portables.

D’autre part cette différence explique pourquoi un programme 32 bits peut s’exécuter sur un processeur 64 bits, il n’utilise juste pas les registres les plus grands.

J’espère avoir était plus claire, même si c’est juste pour mieux comprendre la problématique, la solution étant de cross-compilé.

Si tu veux que ton soft fonctionne en 32 comme en 64, tu peux utiliser Java ! (ou SmallTalk si t’es mazo) mais en binaire pure, les deux architectures sont incompatibles.

Ou perl ou python ou bash ou …

Par contre on peut lancer un binaire 32bits sur une machine 64bits (ça demande un peu de boulot oui).

Ok merci pour l’info. bon ben va faloir utiliser une machine virtuel pour compiler en 32 bits hé oui suffi d’y penser. pour le reste 4a sens le troll plein gaz , je classe en résolut

Non ! Ce serait du gâchis :
forum.ubuntu-fr.org/viewtopic.php?id=400140

J’ai pas compris.

Non ! Ce serait du gâchis :
forum.ubuntu-fr.org/viewtopic.php?id=400140
[/quote]
Merci pour l’info :023

le c++ est portable si c’est coder dans ce but:)

le c++ est portable si c’est coder dans ce but:)[/quote]
Comme le C (c’est pas du troll). La question est de savoir ce que tu appel portable. Les langages compilés en natifs sont portable au niveau sources (sauf l’assembleur) alors que les langages interprétés ou exécutés sur une machine virtuelle sont portable au niveau de l’exécutable.

Dans un cas la portabilité est supportée par le compilateur, dans l’autre par l’interpréteur ou la machine virtuelle.