J'ai écris un programme C qui fonctionne sous Linux et *BSD.
Ce programme contient des sections :
#ifdef LINUX
...
#endif // LINUX
#ifdef NETBSD
...
#endif
#ifdef FREEBSD
...
#endif
etc.
car j'utilise des appels systèmes qui ne fonctionnent que selon l'OS.
Pour compiler, j'utilise par exemple la commande suivante :
gcc -o upclient main.c -Wall -DFREEBSD
Mon problème actuel est que je dois compiler sous chaque OS... donc
j'utilise qemu pour les émuler le temps de compiler.
Second problème, si je compile sous FreeBSD 6.x, le binaire ne
fonctionnera pas sous la 4.x voire la 5. Idem pour NetBSD et OpenBSD.
Bref, je ne vais pas installer tous les OS pour compiler une source.
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le
source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel
Unix/Linux par la suite ?
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
Non. Les OS que tu as cités peuvent tourner sur différentes architectures, c'est une fin de non recevoir à l'espoir d'avoir un binaire universel.
La solution normale à ce problème, c'est de distribuer le code source.
Delf wrote in message <44313985$0$9636$636a55ce@news.free.fr>:
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le
source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel
Unix/Linux par la suite ?
Non. Les OS que tu as cités peuvent tourner sur différentes architectures,
c'est une fin de non recevoir à l'espoir d'avoir un binaire universel.
La solution normale à ce problème, c'est de distribuer le code source.
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
Non. Les OS que tu as cités peuvent tourner sur différentes architectures, c'est une fin de non recevoir à l'espoir d'avoir un binaire universel.
La solution normale à ce problème, c'est de distribuer le code source.
Jean-Marc Bourguet
Delf writes:
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
Non. Le plus proche serait de compiler vers autre chose que de l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec le probleme de t'assurer que la machine virtuelle est presente sur tes cibles d'une part, et avec la bonne version d'autre part :-) (Note que la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Plutot que de compiler sous un emulateur, tu peux aussi t'installer des compilateurs croises. C'est vraissemblablement plus difficile a mettre en place la premiere fois, mais les perfs de compilation devraient etre meilleures.
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Delf <none@none.org> writes:
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source
(sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux
par la suite ?
Non. Le plus proche serait de compiler vers autre chose que de
l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec
le probleme de t'assurer que la machine virtuelle est presente sur tes
cibles d'une part, et avec la bonne version d'autre part :-) (Note que
la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Plutot que de compiler sous un emulateur, tu peux aussi t'installer
des compilateurs croises. C'est vraissemblablement plus difficile a
mettre en place la premiere fois, mais les perfs de compilation
devraient etre meilleures.
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
Non. Le plus proche serait de compiler vers autre chose que de l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec le probleme de t'assurer que la machine virtuelle est presente sur tes cibles d'une part, et avec la bonne version d'autre part :-) (Note que la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Plutot que de compiler sous un emulateur, tu peux aussi t'installer des compilateurs croises. C'est vraissemblablement plus difficile a mettre en place la premiere fois, mais les perfs de compilation devraient etre meilleures.
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Harpo
Delf wrote:
Mon problème actuel est que je dois compiler sous chaque OS... donc j'utilise qemu pour les émuler le temps de compiler.
Second problème, si je compile sous FreeBSD 6.x, le binaire ne fonctionnera pas sous la 4.x voire la 5. Idem pour NetBSD et OpenBSD.
Bref, je ne vais pas installer tous les OS pour compiler une source.
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
J'ai peur que cela ne soit pas si simple...
Sauf erreur, c'est au moment de l'installation de gcc que celui-ci doit être batit pour une plateforme cible, du moins du point de vue matériel, voir http://www.nongnu.org/thug/cross.html
Si c'est un problème d'OS seulement, je crois qu'il y a des formats de sortie difféents possibles. Mais je ne connais pas, peut-être qu'en gogolisant... De toute manière, dans le meilleur des cas, il faudra 1 compile par objet exécutable, avec écentuellement un gcc différent par plateforme cible.
Je ne suis pas sûr d'avoir helpé...
-- http://harpo.free.fr/
Delf wrote:
Mon problème actuel est que je dois compiler sous chaque OS... donc
j'utilise qemu pour les émuler le temps de compiler.
Second problème, si je compile sous FreeBSD 6.x, le binaire ne
fonctionnera pas sous la 4.x voire la 5. Idem pour NetBSD et OpenBSD.
Bref, je ne vais pas installer tous les OS pour compiler une source.
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le
source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel
Unix/Linux par la suite ?
J'ai peur que cela ne soit pas si simple...
Sauf erreur, c'est au moment de l'installation de gcc que celui-ci doit
être batit pour une plateforme cible, du moins du point de vue
matériel,
voir http://www.nongnu.org/thug/cross.html
Si c'est un problème d'OS seulement, je crois qu'il y a des formats de
sortie difféents possibles. Mais je ne connais pas, peut-être qu'en
gogolisant...
De toute manière, dans le meilleur des cas, il faudra 1 compile par
objet exécutable, avec écentuellement un gcc différent par plateforme
cible.
Mon problème actuel est que je dois compiler sous chaque OS... donc j'utilise qemu pour les émuler le temps de compiler.
Second problème, si je compile sous FreeBSD 6.x, le binaire ne fonctionnera pas sous la 4.x voire la 5. Idem pour NetBSD et OpenBSD.
Bref, je ne vais pas installer tous les OS pour compiler une source.
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
J'ai peur que cela ne soit pas si simple...
Sauf erreur, c'est au moment de l'installation de gcc que celui-ci doit être batit pour une plateforme cible, du moins du point de vue matériel, voir http://www.nongnu.org/thug/cross.html
Si c'est un problème d'OS seulement, je crois qu'il y a des formats de sortie difféents possibles. Mais je ne connais pas, peut-être qu'en gogolisant... De toute manière, dans le meilleur des cas, il faudra 1 compile par objet exécutable, avec écentuellement un gcc différent par plateforme cible.
Je ne suis pas sûr d'avoir helpé...
-- http://harpo.free.fr/
Delf
Non. Le plus proche serait de compiler vers autre chose que de l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec le probleme de t'assurer que la machine virtuelle est presente sur tes cibles d'une part, et avec la bonne version d'autre part :-) (Note que la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Inconcevable :
Plutot que de compiler sous un emulateur, tu peux aussi t'installer des compilateurs croises. C'est vraissemblablement plus difficile a mettre en place la premiere fois, mais les perfs de compilation devraient etre meilleures.
La compilation ne prend que quelques secondes, le problème, c'est tous ces OS :
-- Delf
Non. Le plus proche serait de compiler vers autre chose que de
l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec
le probleme de t'assurer que la machine virtuelle est presente sur tes
cibles d'une part, et avec la bonne version d'autre part :-) (Note que
la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Inconcevable :
Plutot que de compiler sous un emulateur, tu peux aussi t'installer
des compilateurs croises. C'est vraissemblablement plus difficile a
mettre en place la premiere fois, mais les perfs de compilation
devraient etre meilleures.
La compilation ne prend que quelques secondes, le problème, c'est tous
ces OS :
Non. Le plus proche serait de compiler vers autre chose que de l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec le probleme de t'assurer que la machine virtuelle est presente sur tes cibles d'une part, et avec la bonne version d'autre part :-) (Note que la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Inconcevable :
Plutot que de compiler sous un emulateur, tu peux aussi t'installer des compilateurs croises. C'est vraissemblablement plus difficile a mettre en place la premiere fois, mais les perfs de compilation devraient etre meilleures.
La compilation ne prend que quelques secondes, le problème, c'est tous ces OS :
-- Delf
Delf
Non. Les OS que tu as cités peuvent tourner sur différentes architectures, c'est une fin de non recevoir à l'espoir d'avoir un binaire universel.
:
La solution normale à ce problème, c'est de distribuer le code source.
Pas possible hélas...
-- Delf
Non. Les OS que tu as cités peuvent tourner sur différentes architectures,
c'est une fin de non recevoir à l'espoir d'avoir un binaire universel.
:
La solution normale à ce problème, c'est de distribuer le code source.
Non. Les OS que tu as cités peuvent tourner sur différentes architectures, c'est une fin de non recevoir à l'espoir d'avoir un binaire universel.
:
La solution normale à ce problème, c'est de distribuer le code source.
Pas possible hélas...
-- Delf
Jean-Marc Bourguet
Delf writes:
Non. Le plus proche serait de compiler vers autre chose que de l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec le probleme de t'assurer que la machine virtuelle est presente sur tes cibles d'une part, et avec la bonne version d'autre part :-) (Note que la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Inconcevable :
Plutot que de compiler sous un emulateur, tu peux aussi t'installer des compilateurs croises. C'est vraissemblablement plus difficile a mettre en place la premiere fois, mais les perfs de compilation devraient etre meilleures.
La compilation ne prend que quelques secondes, le problème, c'est tous ces OS :
Donne plus d'info sur ce que tu veux faire parce que pour le moment, on ne connait pas le probleme, uniquement la solution qui ne te convient pas.
Une autre idee dans le vide: faire une couche qui abstrait les dependances sur l'OS. Ca peut limiter le nombre d'objet a lier a nombre de couple ABI/architecture. C'est impossible a passer en dessous sauf a trouver des sous-ensembles commun entre plusieurs ABI.
Une autre idee, utiliser un module de compilation JIT (GNU en avait un mais si fournir les sources n'est pas une solution...).
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Delf <none@none.org> writes:
Non. Le plus proche serait de compiler vers autre chose que de
l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec
le probleme de t'assurer que la machine virtuelle est presente sur tes
cibles d'une part, et avec la bonne version d'autre part :-) (Note que
la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Inconcevable :
Plutot que de compiler sous un emulateur, tu peux aussi t'installer
des compilateurs croises. C'est vraissemblablement plus difficile a
mettre en place la premiere fois, mais les perfs de compilation
devraient etre meilleures.
La compilation ne prend que quelques secondes, le problème, c'est tous ces
OS :
Donne plus d'info sur ce que tu veux faire parce que pour le moment,
on ne connait pas le probleme, uniquement la solution qui ne te
convient pas.
Une autre idee dans le vide: faire une couche qui abstrait les
dependances sur l'OS. Ca peut limiter le nombre d'objet a lier a
nombre de couple ABI/architecture. C'est impossible a passer en
dessous sauf a trouver des sous-ensembles commun entre plusieurs ABI.
Une autre idee, utiliser un module de compilation JIT (GNU en avait un
mais si fournir les sources n'est pas une solution...).
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Non. Le plus proche serait de compiler vers autre chose que de l'assembleur, une machine virtuelle. Mais alors tu te retrouves avec le probleme de t'assurer que la machine virtuelle est presente sur tes cibles d'une part, et avec la bonne version d'autre part :-) (Note que la machine virtuelle peut etre un sous-ensemble de perl ou de sh).
Inconcevable :
Plutot que de compiler sous un emulateur, tu peux aussi t'installer des compilateurs croises. C'est vraissemblablement plus difficile a mettre en place la premiere fois, mais les perfs de compilation devraient etre meilleures.
La compilation ne prend que quelques secondes, le problème, c'est tous ces OS :
Donne plus d'info sur ce que tu veux faire parce que pour le moment, on ne connait pas le probleme, uniquement la solution qui ne te convient pas.
Une autre idee dans le vide: faire une couche qui abstrait les dependances sur l'OS. Ca peut limiter le nombre d'objet a lier a nombre de couple ABI/architecture. C'est impossible a passer en dessous sauf a trouver des sous-ensembles commun entre plusieurs ABI.
Une autre idee, utiliser un module de compilation JIT (GNU en avait un mais si fournir les sources n'est pas une solution...).
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
david
Harpo wrote:
Delf wrote:
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
Sauf erreur, c'est au moment de l'installation de gcc que celui-ci doit être batit pour une plateforme cible, du moins du point de vue matériel, voir http://www.nongnu.org/thug/cross.html
Oui.
Je produit régulièrement des binaires windows sous linux comme cela. Et également des binaires ARM.
Il faut au pire compiler un gcc par architecture. C'est l'option --target du configure de gcc il me semble. Apres avoir bâti la chaine de compilation, il faut bâtir la glibc pour cette cible également pour pouvoir produire un executable.
Les mot clés google "cross tool chain" doivent pouvoir aider.
david
Harpo <trashcan@hotmail.com> wrote:
Delf wrote:
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le
source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel
Unix/Linux par la suite ?
Sauf erreur, c'est au moment de l'installation de gcc que celui-ci doit
être batit pour une plateforme cible, du moins du point de vue
matériel,
voir http://www.nongnu.org/thug/cross.html
Oui.
Je produit régulièrement des binaires windows sous linux comme cela.
Et également des binaires ARM.
Il faut au pire compiler un gcc par architecture. C'est l'option --target du
configure de gcc il me semble. Apres avoir bâti la chaine de compilation, il
faut bâtir la glibc pour cette cible également pour pouvoir produire un
executable.
Les mot clés google "cross tool chain" doivent pouvoir aider.
Ma question, y a-t-il moyen de compiler une bonne fois pour toute le source (sous FreeBSd par ex) et qu'il fonctionne sous n'importe quel Unix/Linux par la suite ?
Sauf erreur, c'est au moment de l'installation de gcc que celui-ci doit être batit pour une plateforme cible, du moins du point de vue matériel, voir http://www.nongnu.org/thug/cross.html
Oui.
Je produit régulièrement des binaires windows sous linux comme cela. Et également des binaires ARM.
Il faut au pire compiler un gcc par architecture. C'est l'option --target du configure de gcc il me semble. Apres avoir bâti la chaine de compilation, il faut bâtir la glibc pour cette cible également pour pouvoir produire un executable.
Les mot clés google "cross tool chain" doivent pouvoir aider.
david
manu
Delf wrote:
gcc -o upclient main.c -Wall -DFREEBSD
Soit dit en passant, gcc définit des symboles pour l'OS: __NetBSD__ sous NetBSD, __FreeBSD__ sous FreeBSD, etc...
Pour avoir la liste: cpp -dM /dev/null
Ca evite d'avoir à mettre un -DFREEBSD...
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php
Delf <none@none.org> wrote:
gcc -o upclient main.c -Wall -DFREEBSD
Soit dit en passant, gcc définit des symboles pour l'OS:
__NetBSD__ sous NetBSD, __FreeBSD__ sous FreeBSD, etc...
Pour avoir la liste:
cpp -dM /dev/null
Ca evite d'avoir à mettre un -DFREEBSD...
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php
manu@netbsd.org