cr�ation d'une dll (classe c++)
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:
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:
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:
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:
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