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 :
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
 
#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 compile avec mingw32 sous linux:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
i586-mingw32msvc-g++ -Wall -shared tux.cc -o tux.dll -Wl,--output-def,tux.def
Je passe sous Windows...
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:
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
 
#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();
	};
Ca compile mais au linkage ... crash :[fixed]
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.