Compiler c/c++ main en dll

bmoumen27 Messages postés 6 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 28 août 2011 - 24 août 2011 à 13:13
bmoumen27 Messages postés 6 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 28 août 2011 - 28 août 2011 à 15:29
Comment compiler le code suivant en dll avec gcc
int main(int argc, char** argv){
//the main code here
}


Comment c/c++ appels .Exe et obtenir le résultat dans une variable de type char.

Merci


bmoumen

7 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
24 août 2011 à 13:21
Si tu utilises gcc, il y a de forte chance que ça soit pour Linux. Dans ce cas ce sont des .so et non des .dll.
On ne compile pas un "main" en bibliothèque. On y met uniquement des fonctions. Si tu ne fais déjà pas cette distinction, c'est que tu n'es pas encore assez expérimenté pour t'attaquer aux bibliothèques dynamiques.

Voici tout de même un exemple:
int add(int a, int b)
{
  return a + b;
}


Compilé avec:
gcc pouet.c -W -Wall -ansi -pedantic -shared -o pouet.so

C'est le flag -shared qui indique que l'on veut créer une bibliothèque.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 août 2011 à 14:26
Le point de vue Windows va rejoindre celui donné par CptPingu pour Linux.
Une DLL exporte des fonctions, absolument jamais un point d'entrée d'un prog (main() ou WinMain()) puisqu'une DLL ne peut tourner hors d'un exe qui aura fait le contexte processus.

ciao...
BruNews, MVP VC++
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
24 août 2011 à 15:12
Et si tu es sous Windows, ajoute
__declspec(dllexport)

avant tes fonctions/class pour qu'elles s'exportent correctement. La ligne de commande de compilation est la même mais n'oublie pas d'ajouter "c:\CheminVersMingw\bin" à la variable d'environnement "Path".
0
bmoumen27 Messages postés 6 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 28 août 2011
27 août 2011 à 16:58
merci tlmonde pour ces réponses.

ce que je voulais dire et préciser c'est que j'ai un prog c/c++ dont la fonction main prend comme argument 'entrée de la ligne de commande.

la question 1:
comment traiter les argument d'entrée de la ligne de commande pour que ma fonction qui remplace main fonctionne de la même manière.

la question 2:
Comment c/c++ appelle un (.Exe) et obtenir le résultat dans une variable de type char.

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 août 2011 à 23:53
C/C++ est le langage pour coder l'exe, une fois compilé, le langage a fini son taf dès que tu fermes l'éditeur de code.

C'est le loader system qui charge l'exe.
Sous Windows tu as GetCommandLine(), te suffit de faire un strcpy() avec le pointeur retourné dan un char[].

ciao...
BruNews, MVP VC++
0
bmoumen27 Messages postés 6 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 28 août 2011
28 août 2011 à 15:27
voici une solution de comment générer et utiliser une dll avec gcc sous windows à partir de plusieurs fichiers "c".
(windows xp sp2, cygwin 2.340.2.5, gcc 3.2)
1: add.c
[code = cpp]
#include <stdio.h>
#include <math.h>

int add(int a,int b){
int c = a+b;
return c;
}
/code

gcc -c add.c
ce qui donne add.o
-------------------------
2: sub.c
[code = cpp]
#include <stdio.h>
#include <math.h>

int sub(int a,int b){
int c = a-b;
return c;
}
/code

gcc -c sub.c
ce qui donne sub.o
-------------------------
3: mul.c
[code = cpp]
#include <stdio.h>
#include <math.h>

int mul(int a,int b){
int c = a*b;
return c;
}
/code

gcc -c mul.c
ce qui donne mul.o
-------------------------
4: equ.c
[code = cpp]
#include <stdio.h>
#include <math.h>

int equ(int a,int b){
int c = mul(a,b);
int d = add(sub(a,c),sub(b,c));
return d;
}
/code

gcc -c equ.c
ce qui donne equ.o

gcc -shared -o equ.dll equ.o add.o sub.o mul.o
ce qui donne equ.dll
-------------------------
5: main.c
[code = cpp]
#include <stdio.h>
#include <math.h>

int main(){
int a = equ(5,6);//on fait appel à la dll (equ.dll)
printf(" %d",a);
return a;
}
/code

gcc -o main main.c -L./ -lequ
ce qui donne main.exe
0
bmoumen27 Messages postés 6 Date d'inscription lundi 5 février 2007 Statut Membre Dernière intervention 28 août 2011
28 août 2011 à 15:29
voici une solution de comment générer et utiliser une dll avec gcc sous windows à partir de plusieurs fichiers "c".
(windows xp sp2, cygwin 2.340.2.5, gcc 3.2)
1: add.c
#include <stdio.h>
#include <math.h>

int add(int a,int b){
int c = a+b;
return c;
}


gcc -c add.c
ce qui donne add.o
-------------------------
2: sub.c
#include <stdio.h>
#include <math.h>

int sub(int a,int b){
int c = a-b;
return c;
}


gcc -c sub.c
ce qui donne sub.o
-------------------------
3: mul.c
#include <stdio.h>
#include <math.h>

int mul(int a,int b){
int c = a*b;
return c;
}


gcc -c mul.c
ce qui donne mul.o
-------------------------
4: equ.c
#include <stdio.h>
#include <math.h>

int equ(int a,int b){
int c = mul(a,b);
int d = add(sub(a,c),sub(b,c));
return d;
}


gcc -c equ.c
ce qui donne equ.o

gcc -shared -o equ.dll equ.o add.o sub.o mul.o
ce qui donne equ.dll
-------------------------
5: main.c
#include <stdio.h>
#include <math.h>

int main(){
int a = equ(5,6);//on fait appel à la dll (equ.dll)
printf(" %d",a);
return a;
}


gcc -o main main.c -L./ -lequ
ce qui donne main.exe
0
Rejoignez-nous