Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » dll-> Linker error. lib und header sind eingebunden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.12.2006, 04:44 Uhr
NewZealandkiwi



hiho,
ich weis ja nicht ob ich mich nur zudumm anstelle...
Naja ich habe ein problem mit einer simplen dll (bin blutiger anfänger in dll bereich)
Habe eine problem ursache herausgefunden, da mein tutorial nicht erklärt hat, dass man auch die lib einbinden muss, hier auf der seite habe ich dies dann zum ersten mal gelesen, dennoch funktioniert das nicht so wie ich es mir vorgestellt habe:


Zitat von Verfasser:

[Linker Error] undefined reference to `Plus(double, double)'
Id returned 1 exit status



Maths.h :

Code:

#ifndef MATHS_H
#define MATHS_H

#define EXPORT __declspec(dllexport)

EXPORT double Plus(double a, double b);
EXPORT double Minus(double a, double b);
EXPORT double Times(double a, double b);
EXPORT double Divide(double a, double b);

#endif



Maths.cpp :

Code:

#include "Maths.h"

EXPORT double Plus(double a, double b)
{
    return (a+b);
};

EXPORT double Minus(double a, double b)
{
    return (a-b);
};

EXPORT double Times(double a, double b)
{
    return (a*b);
};

EXPORT double Divide(double a, double b)
{
    return (a/b);
};




Test.cpp :

Code:

#include <iostream>
#include "Maths.h"

using namespace std;

int main()
{
    
    cout<<"Test: "<<Plus(4.0f,2.0f)<<endl;
    
    system("PAUSE");
    return 0;
}




Wäre echt nett, wenn mir jemand helfen könnte
lg Manuel
--
It's the difference which makes us same.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.12.2006, 14:18 Uhr
Th



Beim Einbinden mußt du natürlich "__declspec(dllimport)" verwenden.
Am einfachsten, wenn du ein Macro dafür benutzt. Bei den Compilereinstellungen der Lib einfach "EXPORT_LIB" definieren, dann kannst du die Header-Datei "Maths.h" für die Lib und das Hauptprogramm verwenden.
In der math.h dann einfach folgendes schreiben:

C++:
#ifdef EXPORT_LIB
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.12.2006, 16:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Der VC benutzt normalerweise automatisch ein Makro "PROJEKT"_EXPORTS dafür, muss man nur nachsehen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.12.2006, 22:08 Uhr
NewZealandkiwi



hiho,
erst mal vielen dank, ihr seid spitze, ihr habt nun neinverständnis von dlls ein wenig erweitert...
jedoch gibt es leider immer noch fehler:


Zitat von Verfasser:

[Linker error] undefined refernce to `_imp__Z4Plusdd'
Id returned 1 exit status



Ich habe meine lib nochmals neu gemacht und nun auch dllimport definiert, wie ihr mir das mit dem makro vorgeschlagen habt.
naja ich habe dann header und lib in mein test programm eingebunden, jedoch kommt immer noch der fehler

lg Manuel
--
It's the difference which makes us same.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.12.2006, 15:44 Uhr
Th



Da kommen C++ und C durcheinander.
Du hast die Library-Funktionen als C-Dateien kompiliert und einbinden willst du sie in ein C++ Programm.
Dann ist der einfachste Weg, das Schlüsselwort 'extern "C" ' zu benutzen (das Makro __cplusplus ist nur in C++ gesetzt):

C++:
#ifndef MATHS_H
#define MATHS_H

#ifdef __cplusplus
extern "C"
{
#endif

#define EXPORT __declspec(dllexport)

EXPORT double Plus(double a, double b);
EXPORT double Minus(double a, double b);
EXPORT double Times(double a, double b);
EXPORT double Divide(double a, double b);

#ifdef __cplusplus
}
#endif

#endif

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.12.2006, 03:01 Uhr
NewZealandkiwi



hiho,
hmm ich habe es geändert wie du sagtest, dennoch melder er den selben fehler

lg Manuel
--
It's the difference which makes us same.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.12.2006, 11:48 Uhr
NewZealandkiwi



hi,
hmm es sind nun schon einige tage vergangen...weis den keiner von euch einen rat?
weil ich habe nun alle veränderungen gemacht, die ihr vorgeschlagen habt, dennoch kammt die gleiche fehlermeldung....so schwer sollte das mit dlls doch nicht sein oder?
lg Manuel
--
It's the difference which makes us same.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.12.2006, 00:51 Uhr
NewZealandkiwi



Hmm
ok ein freund vom mir hat mir nu geholfen...
es funktioniert nun, habe nur die falsche Lib gelinkt...es war die ex-irgendwas-lib
lg Manuel
--
It's the difference which makes us same.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: