multiply-defined - C - Programmation
Marsh Posté le 26-10-2006 à 17:55:19
Salut,
Les déclarer dans un .h et les définir dans un .c normalement. Sinon, j'ai pas pigé la question.
Marsh Posté le 26-10-2006 à 17:55:29
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. |
?
Marsh Posté le 26-10-2006 à 18:00:37
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
Marsh Posté le 26-10-2006 à 18:19:28
Ben, tu les renommes, y'a pas le choix.
Pourquoi 2 fonctions différentes??
Marsh Posté le 26-10-2006 à 18:23:12
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?
Marsh Posté le 26-10-2006 à 18:26:38
ReplyMarsh Posté le 26-10-2006 à 18:27:53
darf a écrit : c'est les memes fonctions, mais elle doivent etre definies dans les deux fichiers... |
une fonction ne peut pas avoir plusieurs definition, ca ne te parais pas logique ?
Marsh Posté le 26-10-2006 à 18:37:43
darf a écrit : Petite question sur le multiply-defined, comment l'eviter, tout ca, je m'explique: |
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.
Marsh Posté le 26-10-2006 à 18:39:00
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 ...
Marsh Posté le 26-10-2006 à 18:41:27
darf a écrit : |
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...
Marsh Posté le 26-10-2006 à 18:42:56
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
Marsh Posté le 26-10-2006 à 18:51:07
darf a écrit : Description: |
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 :
|
comme fopen()/fclose(), par exemple...
http://mapage.noos.fr/emdel/tad.htm
Marsh Posté le 26-10-2006 à 19:02:31
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
Marsh Posté le 26-10-2006 à 20:04:13
skelter a écrit : justement on est en C la |
Rhâ j'oublie toujours qu'il n'y a pas de surcharge en C
darf a écrit : Ca serait bien si c'etait comme ca... |
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.
Marsh Posté le 26-10-2006 à 17:50:55
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?