Compiler c/c++ main en dll

Signaler
Messages postés
6
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
28 août 2011
-
Messages postés
6
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
28 août 2011
-
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

Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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++
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

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".
Messages postés
6
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
28 août 2011

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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++
Messages postés
6
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
28 août 2011

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
Messages postés
6
Date d'inscription
lundi 5 février 2007
Statut
Membre
Dernière intervention
28 août 2011

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