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