Bonjour � tous,
Alors voil�, j'ai un probl�me qui m'agasse depuis un petit bout de temps...
J'ai du code c++ que je veux faire tourner sous linux, mac et win... je ne veux pas donner mon code, donc, je cr�e des librairies. Sous linux pas de probl�me, mais pour cr�er des dll qui fonctionnent correctement c'est la gal�re !
voil� un exemple bidon de classe :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 //-------------------------------------------------------------------- // Fichier .h #ifndef __TEST_TOOL_H__ #define __TEST_TOOL_H__ #include "StdAfx.h" // Modifié pour passer aussi sous linux #ifdef TEST_TOOL_DLL_EXPORTS #define TEST_TOOL_API __declspec(dllexport) #else #define TEST_TOOL_API __declspec(dllimport) #pragma message("**** Importation de la DLL (2) ****") #endif #include <stdio.h> #include <stdlib.h> class TEST_TOOL_API CTest { public: CTest(); ~CTest(); void Somme(); public: int a; int b; int c; }; #endif
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 //-------------------------------------------------------------------- // Fichier de la dll .cpp #include "TestLib.h" CTest::CTest() { a = 2; b = 6; c = 0; } CTest::~CTest() { } void CTest::Somme() { c = a + b; printf("\n **** %d + %d = %d ****\n",a,b,c); }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 # Makefile de la dll (exécuté sur mingw32) ... library: obj $(MKDIR) $(LIB_DIR_LIB) ar rc $(LIB_DIR_LIB)/lib$(LIB_TEST_NAME).a $(LIB_DIR_SRC)/$(LIB_TEST_NAME).o ranlib $(LIB_DIR_LIB)/lib$(LIB_TEST_NAME).a g++ -shared -o $(LIB_DIR_LIB)/$(LIB_TEST_NAME).dll $(LIB_DIR_SRC)/$(LIB_TEST_NAME).o -Wl,--kill-at,--output-def,$(LIB_DIR_SRC)/$(LIB_TEST_NAME).def dllwrap --def $(LIB_DIR_SRC)/$(LIB_TEST_NAME).def -o $(LIB_DIR_LIB)/$(LIB_TEST_NAME).dll $(LIB_DIR_SRC)/$(LIB_TEST_NAME).o ...
Fichier .def g�n�r� par le makefile :
EXPORTS
_ZN5CTest5SommeEv @1
_ZN5CTestC1Ev @2
_ZN5CTestC2Ev @3
_ZN5CTestD1Ev @4
_ZN5CTestD2Ev @5
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 //-------------------------------------------------------------------- // Fichier principal #include "TestLib.h" int main(int argc, char* argv[]) { CTest *_Test = new CTest(); _Test->Somme(); return 0; }
Message d'erreur de visual c++ :
--------------------Configuration: test3 - Win32 Debug--------------------
Linking...
Creating library Debug/test3.lib and object Debug/test3.exp
test3.obj : error LNK2001: unresolved external symbol "public: void __thiscall CTest::Somme(void)" (?Somme@CTest@@QAEXXZ)
test3.obj : error LNK2001: unresolved external symbol "public: __thiscall CTest::CTest(void)" (??0CTest@@QAE@XZ)
Debug/test3.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
test3.exe - 3 error(s), 0 warning(s)
Je souhaite donc compiler ma dll sous mingw32 et l'int�grer dans visual c++.
Je suis un peu perdu l�... j'ai essay� un nombre consid�rable de solutions et rien ne passe. Par contre si la dll est cr�e sous visual, tout se d�roule sans probl�me. De m�me une dll en C (en utilisant extern "C") fonctionne correctement.
Je pense que c'est un probl�me de nom de fonction (voir .def). Car la compilation se passe bien, mais pas l�disiotn de liens.
qqun peut-il m'�clairer ?
merci
Partager