Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Frederic Lachasse
On Aug 22, 11:24 am, Guillaume GOURDIN wrote:
Bonjour à tous,
est-il possible d'ajouter des *.o compilé en C et d'autres en C++ dans un seul fichier de bibliothèque? Quels précuation s faut-il prendre? Je sais déjà qu'il faut ajouter 'extern "C"'.
En principe, aucun problème avec cela. On peut aussi ajouter des .o fabriqué à partir d'autres langage, assembleur ou Fortran par exemple. Cependant, il peut y avoir des difficultés dues à des incompatibilité s de formats des .o, par exemple si on mélanges des .o 32 bits avec des .o 64 bits. Comme on ne peut pas inclure du code 32 bits et 64 bits dans un même exécutable, l'utilitaire "ar" (pour créer les librairies .a sous Unix/Linux) souvent refuse de mélanger les 2 types de modules objets.
Après cela, le fait que ces modules .o dans la librarie généré vont marcher dans le même exécutable est un autre problème. Si les programme C et C++ sont compilés par le même compilateur (en fait, les compilateurs C++ sont toujours accompagnés par un compilateur C qui leur est compatible), pas de problème.
On Aug 22, 11:24 am, Guillaume GOURDIN <tr...@hotmail.com> wrote:
Bonjour à tous,
est-il possible d'ajouter des *.o compilé en C et d'autres en C++ dans
un seul fichier de bibliothèque? Quels précuation s faut-il prendre? Je
sais déjà qu'il faut ajouter 'extern "C"'.
En principe, aucun problème avec cela. On peut aussi ajouter des .o
fabriqué à partir d'autres langage, assembleur ou Fortran par exemple.
Cependant, il peut y avoir des difficultés dues à des incompatibilité s
de formats des .o, par exemple si on mélanges des .o 32 bits avec
des .o 64 bits. Comme on ne peut pas inclure du code 32 bits et 64
bits dans un même exécutable, l'utilitaire "ar" (pour créer les
librairies .a sous Unix/Linux) souvent refuse de mélanger les 2 types
de modules objets.
Après cela, le fait que ces modules .o dans la librarie généré vont
marcher dans le même exécutable est un autre problème. Si les
programme C et C++ sont compilés par le même compilateur (en fait, les
compilateurs C++ sont toujours accompagnés par un compilateur C qui
leur est compatible), pas de problème.
est-il possible d'ajouter des *.o compilé en C et d'autres en C++ dans un seul fichier de bibliothèque? Quels précuation s faut-il prendre? Je sais déjà qu'il faut ajouter 'extern "C"'.
En principe, aucun problème avec cela. On peut aussi ajouter des .o fabriqué à partir d'autres langage, assembleur ou Fortran par exemple. Cependant, il peut y avoir des difficultés dues à des incompatibilité s de formats des .o, par exemple si on mélanges des .o 32 bits avec des .o 64 bits. Comme on ne peut pas inclure du code 32 bits et 64 bits dans un même exécutable, l'utilitaire "ar" (pour créer les librairies .a sous Unix/Linux) souvent refuse de mélanger les 2 types de modules objets.
Après cela, le fait que ces modules .o dans la librarie généré vont marcher dans le même exécutable est un autre problème. Si les programme C et C++ sont compilés par le même compilateur (en fait, les compilateurs C++ sont toujours accompagnés par un compilateur C qui leur est compatible), pas de problème.
James Kanze
On Aug 22, 5:24 pm, Guillaume GOURDIN wrote:
est-il possible d'ajouter des *.o compilé en C et d'autres en C++ dans un seul fichier de bibliothèque?
En principe, ça dépend du compilateur/bibliothèquaire. Mais dans la pratique, à partir du moment qu'on a un fichier de format objet, son provenence n'a plus d'importance. (Puisque tu parles des *.o, je supposerais Unix. Dans tel cas, tu peux ajouter littéralement tout dans un bibliothèque -- non seulement des objets, mais aussi des sources, de la documentation...)
S'en servir une fois que c'est dans la bibliothèque, c'est une autre question. En règle générale, s'il y a du C++, il faut que le main soit en C++. Sinon, tout ce qui sert d'interface entre les modules C et les modules C++ doit être déclaré « extern "C" » dans le C++.
Quels précuation s faut-il prendre? Je sais déjà qu'il faut ajouter 'extern "C"'.
C'est la principale. Au moins en principe (et souvent en fait), il faut aussi que le main soit écrit en C++, et que le programme final soit linké comme du C++ (avec g++ plutôt que gcc, par exemple). Aussi, que tout le C++ soit compilé avec la même version du même compilateur, et avec les mêmes options. Ce qui est une simplification, évidemment -- prèsque tous les compilateurs garantissent la compatibilité binaire entre certaines versions, et évidemment, certaines options n'y jouent pas non plus. Mais pour les détails, il faut bien voir la documentation du compilateur.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Aug 22, 5:24 pm, Guillaume GOURDIN <tr...@hotmail.com> wrote:
est-il possible d'ajouter des *.o compilé en C et d'autres en
C++ dans un seul fichier de bibliothèque?
En principe, ça dépend du compilateur/bibliothèquaire. Mais dans
la pratique, à partir du moment qu'on a un fichier de format
objet, son provenence n'a plus d'importance. (Puisque tu parles
des *.o, je supposerais Unix. Dans tel cas, tu peux ajouter
littéralement tout dans un bibliothèque -- non seulement des
objets, mais aussi des sources, de la documentation...)
S'en servir une fois que c'est dans la bibliothèque, c'est une
autre question. En règle générale, s'il y a du C++, il faut que
le main soit en C++. Sinon, tout ce qui sert d'interface entre
les modules C et les modules C++ doit être déclaré « extern
"C" » dans le C++.
Quels précuation s faut-il prendre? Je sais déjà qu'il faut
ajouter 'extern "C"'.
C'est la principale. Au moins en principe (et souvent en fait),
il faut aussi que le main soit écrit en C++, et que le programme
final soit linké comme du C++ (avec g++ plutôt que gcc, par
exemple). Aussi, que tout le C++ soit compilé avec la même
version du même compilateur, et avec les mêmes options. Ce qui
est une simplification, évidemment -- prèsque tous les
compilateurs garantissent la compatibilité binaire entre
certaines versions, et évidemment, certaines options n'y jouent
pas non plus. Mais pour les détails, il faut bien voir la
documentation du compilateur.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
est-il possible d'ajouter des *.o compilé en C et d'autres en C++ dans un seul fichier de bibliothèque?
En principe, ça dépend du compilateur/bibliothèquaire. Mais dans la pratique, à partir du moment qu'on a un fichier de format objet, son provenence n'a plus d'importance. (Puisque tu parles des *.o, je supposerais Unix. Dans tel cas, tu peux ajouter littéralement tout dans un bibliothèque -- non seulement des objets, mais aussi des sources, de la documentation...)
S'en servir une fois que c'est dans la bibliothèque, c'est une autre question. En règle générale, s'il y a du C++, il faut que le main soit en C++. Sinon, tout ce qui sert d'interface entre les modules C et les modules C++ doit être déclaré « extern "C" » dans le C++.
Quels précuation s faut-il prendre? Je sais déjà qu'il faut ajouter 'extern "C"'.
C'est la principale. Au moins en principe (et souvent en fait), il faut aussi que le main soit écrit en C++, et que le programme final soit linké comme du C++ (avec g++ plutôt que gcc, par exemple). Aussi, que tout le C++ soit compilé avec la même version du même compilateur, et avec les mêmes options. Ce qui est une simplification, évidemment -- prèsque tous les compilateurs garantissent la compatibilité binaire entre certaines versions, et évidemment, certaines options n'y jouent pas non plus. Mais pour les détails, il faut bien voir la documentation du compilateur.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
James Kanze
On Aug 23, 11:26 pm, Frederic Lachasse wrote:
On Aug 22, 11:24 am, Guillaume GOURDIN wrote: > est-il possible d'ajouter des *.o compilé en C et d'autres > en C++ dans un seul fichier de bibliothèque? Quels > précuation s faut-il prendre? Je sais déjà qu'il faut > ajouter 'extern "C"'.
En principe, aucun problème avec cela. On peut aussi ajouter des .o fabriqué à partir d'autres langage, assembleur ou Fortran par exemple . Cependant, il peut y avoir des difficultés dues à des incompatibilit és de formats des .o, par exemple si on mélanges des .o 32 bits avec des .o 64 bits. Comme on ne peut pas inclure du code 32 bits et 64 bits dans un même exécutable, l'utilitaire "ar" (pour créer les librairies .a sous Unix/Linux) souvent refuse de mélanger les 2 types de modules objets.
Pas sous Unix. Un fichier d'« archive » peut contenir n'importe quoi. Tout ce qui est dit est que « When an archive consists entirely of valid object files, the implementation shall format the archive so that it is usable as a library for link editing (see c99 and fort77). When some of the archived files are not valid object files, the suitability of the archive for library use is undefined. » Unix (Open Group) exige en plus que « f an archive consists entirely of printable files, the entire archive shall be printable », ainsi que la création automatique de l'« index » si un fichier objet est présent (et donc, qu'on n'a pas besoin de « ranlib »).
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Aug 23, 11:26 pm, Frederic Lachasse <frederic.lacha...@verizon.net>
wrote:
On Aug 22, 11:24 am, Guillaume GOURDIN <tr...@hotmail.com> wrote:
> est-il possible d'ajouter des *.o compilé en C et d'autres
> en C++ dans un seul fichier de bibliothèque? Quels
> précuation s faut-il prendre? Je sais déjà qu'il faut
> ajouter 'extern "C"'.
En principe, aucun problème avec cela. On peut aussi ajouter des .o
fabriqué à partir d'autres langage, assembleur ou Fortran par exemple .
Cependant, il peut y avoir des difficultés dues à des incompatibilit és
de formats des .o, par exemple si on mélanges des .o 32 bits avec
des .o 64 bits. Comme on ne peut pas inclure du code 32 bits et 64
bits dans un même exécutable, l'utilitaire "ar" (pour créer les
librairies .a sous Unix/Linux) souvent refuse de mélanger les 2 types
de modules objets.
Pas sous Unix. Un fichier d'« archive » peut contenir n'importe
quoi. Tout ce qui est dit est que « When an archive consists
entirely of valid object files, the implementation shall format
the archive so that it is usable as a library for link editing
(see c99 and fort77). When some of the archived files are not
valid object files, the suitability of the archive for library
use is undefined. » Unix (Open Group) exige en plus que « f an
archive consists entirely of printable files, the entire archive
shall be printable », ainsi que la création automatique de
l'« index » si un fichier objet est présent (et donc, qu'on n'a
pas besoin de « ranlib »).
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Aug 22, 11:24 am, Guillaume GOURDIN wrote: > est-il possible d'ajouter des *.o compilé en C et d'autres > en C++ dans un seul fichier de bibliothèque? Quels > précuation s faut-il prendre? Je sais déjà qu'il faut > ajouter 'extern "C"'.
En principe, aucun problème avec cela. On peut aussi ajouter des .o fabriqué à partir d'autres langage, assembleur ou Fortran par exemple . Cependant, il peut y avoir des difficultés dues à des incompatibilit és de formats des .o, par exemple si on mélanges des .o 32 bits avec des .o 64 bits. Comme on ne peut pas inclure du code 32 bits et 64 bits dans un même exécutable, l'utilitaire "ar" (pour créer les librairies .a sous Unix/Linux) souvent refuse de mélanger les 2 types de modules objets.
Pas sous Unix. Un fichier d'« archive » peut contenir n'importe quoi. Tout ce qui est dit est que « When an archive consists entirely of valid object files, the implementation shall format the archive so that it is usable as a library for link editing (see c99 and fort77). When some of the archived files are not valid object files, the suitability of the archive for library use is undefined. » Unix (Open Group) exige en plus que « f an archive consists entirely of printable files, the entire archive shall be printable », ainsi que la création automatique de l'« index » si un fichier objet est présent (et donc, qu'on n'a pas besoin de « ranlib »).
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34