Salut,
Avant tout je tiens à m'excuser si vous trouver que le sujet n'a pas sa place dans cette catégorie "Programmation Linux" mais vu que je fais de la cross compilation, ca concerne à la fois linux et à la fois windows ... donc fallait trancher...
Je dispose de sources C++ que je devrai compiler sous Linux pour au final être utiliser sous windows (C#). Aille ! Aille ! Aille !
Je tente donc quelques essais mais en vain pour l'instant...
Mon fichier tux.h (je ne mets pas les cpp qui sont sans intérêt) sous Linux est :
Je compile avec mingw32 sous linux:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #ifndef TUX_H #define TUX_H #define DLL_EXPORT __declspec(dllexport) extern "C"{ class DLL_EXPORT Tux { private: const char* NAME; public: Tux(void){NAME="Racer";} const char* __stdcall getName(); }; } #endif //TUX_H
Je passe sous Windows...Code:i586-mingw32msvc-g++ -Wall -shared tux.cc -o tux.dll -Wl,--output-def,tux.def
Je crée la lib :
[cpp]lib /def:tux.def[/cpp]
Je crée mon projet VSC++ (CLR pour pouvoir plus tard appeler ma classe depuis C#).
J'inclus mon tux.h, je mets tux.dll et tux.lib dans le répertoire de debug.
J'écris mon wrapper WrappingUx.h:
Ca compile mais au linkage ... crash :[fixed]Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include "stdafx.h" #include "tux.h" #pragma comment (lib, "./tux.lib") #include <msclr\auto_handle.h> #pragma once public ref class TuxWrapper { private: Tux *m_pTux; public: TuxWrapper(); ~TuxWrapper(); System::String^ getName(); };
Error 1 error LNK2028: unresolved token (0A00000D) "public: char const * __stdcall Tux::getName(void)" (?getName@Tux@@$$FQAGPBDXZ) referenced in function "public: class System::String ^ __clrcall TuxWrapper::getName(void)" (?getName@TuxWrapper@@$$FQ$AAMP$AAVString@System@@XZ) WrappingUx.obj WrappingUx
Error 2 error LNK2019: unresolved external symbol "public: char const * __stdcall Tux::getName(void)" (?getName@Tux@@$$FQAGPBDXZ) referenced in function "public: class System::String ^ __clrcall TuxWrapper::getName(void)" (?getName@TuxWrapper@@$$FQ$AAMP$AAVString@System@@XZ) WrappingUx.obj WrappingUx
Error 3 fatal error LNK1120: 2 unresolved externals C:\Work\Leny\CPP\Tests\CrossCompilation\C#\TestDllImport\Debug\WrappingUx.dll WrappingUx[/fixed]
Et là, je sèche carrément.
J'ai essayé de jouer avec les extern, __stdcall, dllexport, .... rien à faire :(
Quelqu'un aurait-il une idée du problème ?
Une alternative ?
Une info qui pourrait m'être utile?
Merci d'avance pour votre aide.