Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3391 connectés 

  FORUM HardWare.fr
  Programmation
  C

  multiply-defined

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

multiply-defined

n°1465620
darf
Posté le 26-10-2006 à 17:50:55  profilanswer
 

Bonsoir toutes et tous,
 
Petite question sur le multiply-defined, comment l'eviter, tout ca, je m'explique:
pour l'instant j'ai 2 fichiers .c qui définissent tous les deux les fonctions:
- create()
- init()
- destroy()
Ces fonctions DOIVENT etre nommés comme cela, et je dois avoir 2 fichiers car j'utilise une appli externe.
 
Question: Comment définir ces fonctions pour qu'elles soient définies/utilisables dans le deux fichiers à la fois?
 

mood
Publicité
Posté le 26-10-2006 à 17:50:55  profilanswer
 

n°1465622
IrmatDen
Posté le 26-10-2006 à 17:55:19  profilanswer
 

Salut,
Les déclarer dans un .h et les définir dans un .c normalement. Sinon, j'ai pas pigé la question.

n°1465623
_darkalt3_
Proctopathe
Posté le 26-10-2006 à 17:55:29  profilanswer
 

J'ai rien compris
 
Les fichiers d'entete, etc, ca te dit quelque chose ?
La surcharge ?
 
Ca veut dire quoi ça, concretement :

Citation :

Ces fonctions DOIVENT etre nommés comme cela, et je dois avoir 2 fichiers car j'utilise une appli externe.


?


---------------
Töp of the plöp
n°1465624
_darkalt3_
Proctopathe
Posté le 26-10-2006 à 17:55:58  profilanswer
 

[:grilled]


---------------
Töp of the plöp
n°1465628
darf
Posté le 26-10-2006 à 18:00:37  profilanswer
 

ok j'ai pas ete clair:
 
- je cree une lib
- dedans je veux mettre 2 fichiers qui definissent tous les deux les methodes destroy(), create()
- et je me retrouve avec un multiply-defined symbol

n°1465640
IrmatDen
Posté le 26-10-2006 à 18:19:28  profilanswer
 

Ben, tu les renommes, y'a pas le choix.
Pourquoi 2 fonctions différentes??

n°1465644
darf
Posté le 26-10-2006 à 18:23:12  profilanswer
 

c'est les memes fonctions, mais elle doivent etre definies dans les deux fichiers...
et je peux pas les renommer, vu que c'est le point d'entree d'une appli externe.
Y'a vraiment pas d'autre choix que de faire 2 libs?

n°1465649
skelter
Posté le 26-10-2006 à 18:26:38  profilanswer
 

déclare les en static
 

_darkalt3_ a écrit :

J'ai rien compris
La surcharge ?


 
justement on est en C la

n°1465652
skelter
Posté le 26-10-2006 à 18:27:53  profilanswer
 

darf a écrit :

c'est les memes fonctions, mais elle doivent etre definies dans les deux fichiers...
et je peux pas les renommer, vu que c'est le point d'entree d'une appli externe.
Y'a vraiment pas d'autre choix que de faire 2 libs?


 
une fonction ne peut pas avoir plusieurs definition, ca ne te parais pas logique ?

n°1465660
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-10-2006 à 18:37:43  profilanswer
 

darf a écrit :

Petite question sur le multiply-defined, comment l'eviter, tout ca, je m'explique:
pour l'instant j'ai 2 fichiers .c qui définissent tous les deux les fonctions:
- create()
- init()
- destroy()


Ben si ces deux fichiers font partie du même projet, ça ne fonctionnera pas : "multiply-defined". C'est logique, non ?

Citation :

Ces fonctions DOIVENT etre nommés comme cela, et je dois avoir 2 fichiers car j'utilise une appli externe.


Je ne vois pas le rapport avec une appli externe. Tu peux préciser ?
 
Question: Comment définir ces fonctions pour qu'elles soient définies/utilisables dans le deux fichiers à la fois?
Dans le même projet, c'est pas possible. Je pense que tu as un problème plus général de conception et d'organisation de ton ou tes projets.
 
Essaye de décrire exactement ce que tu veux faire.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 26-10-2006 à 18:37:43  profilanswer
 

n°1465661
darf
Posté le 26-10-2006 à 18:39:00  profilanswer
 

si ca me parait logique, mais apres une bonne cure de java je pete un cable sur la rigidite du C ...
pas de namespace, pas de classes :( :(
et pi evidemment je peux pas les declarer static vu que c'est des fonctions "imposées", va pour 2 libs alors ...

n°1465664
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-10-2006 à 18:41:27  profilanswer
 

darf a écrit :


- je cree une lib
- dedans je veux mettre 2 fichiers qui definissent tous les deux les methodes destroy(), create()


Si ils définissent les mêmes fonctions avec les même noms, pourquoi tu mets 2 fichiers ? Tu as essayé avec un seul, il se passe quoi ? Ca marche trop bien ? C'est ça le problème ?

Citation :

- et je me retrouve avec un multiply-defined symbol


Ben oui, c'est normal. Tu fais, en gros, n'importe quoi...


Message édité par Emmanuel Delahaye le 26-10-2006 à 18:45:29

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1465666
darf
Posté le 26-10-2006 à 18:42:56  profilanswer
 

Description:
j'utilise une api pour creer un plugin sous forme de .so
cette api m'impose comme point d'entree une fonction create() et comme sortie une fonction destroy()
 
or je voulais creer 2 plugins en un si l'on peut dire, et donc definir 2 points d'entree create() et 2 destroy() dans la meme librarie.
Ce qui n'est apparemment pas possible, du coup je vais simplement creer 2 libs

n°1465670
Emmanuel D​elahaye
C is a sharp tool
Posté le 26-10-2006 à 18:51:07  profilanswer
 

darf a écrit :

Description:
j'utilise une api pour creer un plugin sous forme de .so
cette api m'impose comme point d'entree une fonction create() et comme sortie une fonction destroy()
 
or je voulais creer 2 plugins en un si l'on peut dire, et donc definir 2 points d'entree create() et 2 destroy() dans la meme librarie.
Ce qui n'est apparemment pas possible, du coup je vais simplement creer 2 libs


2 plugins, ca veut dire une fois le code, mais 2 fois les données. Il faut apprendre à écrire du code instanciable. Une bibliothèque, c'est fait pour ça...
 
En plus, create() / destroy(), ca le fait bien....

Code :
  1. T *pa = create() /* 1 ere instance */
  2.    T *pb = create() /* 2 eme instance */
  3.    ...
  4.    destroy (pb);
  5.    destroy (pa);


comme fopen()/fclose(), par exemple...
 
http://mapage.noos.fr/emdel/tad.htm


Message édité par Emmanuel Delahaye le 26-10-2006 à 18:51:46

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1465675
darf
Posté le 26-10-2006 à 19:02:31  profilanswer
 

Ca serait bien si c'etait comme ca...
Mais non, il faut un fichier d'entree pour chaque plugin nomme plugin_1.c et plugin_2.c sachant que ces deux fichiers doivent definir les methodes:
create()
et destroy()
je n'ai pas acces au niveaux superieurs, c'est juniper qui pose les problemes d'architecture  :p

Message cité 1 fois
Message édité par darf le 26-10-2006 à 19:03:05
n°1465681
Joel F
Real men use unique_ptr
Posté le 26-10-2006 à 19:18:46  profilanswer
 

et genre, faire *2* .so ne te parait pas plus logique ?

n°1465688
_darkalt3_
Proctopathe
Posté le 26-10-2006 à 20:04:13  profilanswer
 

skelter a écrit :

justement on est en C la


Rhâ j'oublie toujours qu'il n'y a pas de surcharge en C  :sweat:  
 

darf a écrit :

Ca serait bien si c'etait comme ca...
Mais non, il faut un fichier d'entree pour chaque plugin nomme plugin_1.c et plugin_2.c sachant que ces deux fichiers doivent definir les methodes:
create()
et destroy()
je n'ai pas acces au niveaux superieurs, c'est juniper qui pose les problemes d'architecture  :p


 
Oui mais l'idée du plugin c'est que le plug en question ne soit pas inclu à la compilation, mais ajouté plus tard sous forme de binaire, comme une dll par exemple.


---------------
Töp of the plöp

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  multiply-defined

 

Sujets relatifs
Id is not definedAlready defined
[Perl] Vitesse entre grep et defined 
Plus de sujets relatifs à : multiply-defined


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)