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 :
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:
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:
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.
Partager