Dll mit Codelite
-
Hallo,
ich verzweifle momentan am Erstellen einer nutzbaren DLL mit Codelite.
Habe keine Ahnung von Dlls, deshalb hab ich nach Tutorials gesucht, die bezogen
sich aber entweder auf die WinApi oder Linux.Habe meine Test-Dll so aufgebaut:
test.h
#ifndef MAIN_H #define MAIN_H __declspec(dllexport) char test(); #endiftest.cpp
#include "main.h" __declspec(dllexport) char test() { return 'T'; }In meinem Testprogramm hab ich dann später, den Header inkludiert, die Bibliothek gelinkt und versucht
auf test() zuzugreifen doch ich bekam nur ein undefined reference to `test()'
Mein Hauptproblem ist, dass ich bei den diversen Makros in
den Beispielen nicht durchblicke. Ich hoffe ihr könnt mir etwas Klarheit verschaffen. Nutzen will ich die DLL nachher zusammen mit wxWidgets.Vielen Dank im Voraus
-
extern "C" __declspec(dllexport) char test();
-
Ich weiß nicht, wo da was mit CodeLite, was ich eh nicht kenne, zu tun hat, aber es ist ja so, dass Du beim Kompilieren der DLL genau das schreiben musst, was Du auch getan hast, beim Nutzen der DLL jedoch dllexport durch dllimport ersetzen musst.
Das führt dann dazu, dass man sich einfach so was schreibt:
// Header #ifdef IMPORT_DLL #define DLL_SPECIFIER __declspec(dllimport) #else #define DLL_SPECIFIER __declspec(dllexport) #endif int DLL_SPECIFIER a(); // genau son cpp-DateiNutzt Du dann im Programm, welches das Teil nutzt, den Header, definierst Du vorher (oder einfach fürs ganze Projekt) IMPORT_DLL, sodass automatisch die Umwandlung in dllimport geschieht.
-
Müsste das
int DLL_SPECIFIER a()dann nicht
extern "C" DLL_SPECIFIER int a()heißen?
-
Mache ich nie so, außer ich will Funktionen so exportieren, dass sie auch in Excel oder so laufen. Will ich aber in der Regel nicht. Eine Erläuterung Ethons, warum er das extern "C" eingeführt hat, wäre hilfreich gewesen.
-
Habe für einen Moment fälschlich angenommen dass das Name-Mangling für den Linkerfehler verantwortlich ist.
Wird auch ohne extern "C" funktionieren.
-
Vielen Dank für die Hilfe.
Der Linkerfehler wurde versucht, da Codelite
nicht den Pfad der Bibliothek zuordnen konnte. Jetzt klappt's.