Linker Probleme beim erstellen einer DLL mit MinGW
-
ich möchte eine dll mit c++ erstellen, die später aus matlab heraus benutzt werden kann. um das einbinden in matlab zu vereinfachen deklariere ich die library als: extern "C". ich habe ein minimalbeispiel geschrieben, um zu schauen, ob alles so funktioniert wie ich es mir vorstelle. beim einbinden der dll in mein c testprogramm bekomme ich immer folgenden linker fehler:
undefined reference to 'test_Methode'minimalbeispiel:
test_DLL.cpp#include <string> #include <iostream> int test_Methode( const char* testString ) { std::string str = testString; std::cout << str << std::endl; return EXIT_SUCCESS; }
test_DLL.hpp
#ifndef __test_DLL_hpp #define __test_DLL_hpp #ifdef __cplusplus extern "C" { #endif int test_Methode( const char* ); #ifdef __cplusplus } #endif #endif
main.c
#include "test_DLL.hpp" int main( int argc, char *argv[] ) { return test_Methode( "Hello World" ); }
kompiliert wird wie folgt:
g++ -shared - Wall -MM test_DLL.cpp > test_DLL.dep
g++ -shared - Wall -c test_DLL.cpp -o test_DLL.o
g++ -shared - Wall -o test_DLL.dll > test_DLL.ogcc -c main.c
gcc -o Test.exe main.o test_DLL.dll
-
Bei der Definition fehlt das extern "C".
-
@LordJaxom_lg
kannst du die stelle bitte etwas genauer definieren? ich weiß nicht, welche definition du meinst. eine abgeänderte code-passage wäre ansonsten auch ganz nett .noch eine frage:
ich habe im netz ein beispiel gefunden und da hat jemand vor die funktion __stdcall geschrieben. was bewirkt das?
-
Ist zwar schon ein paar Tage her.
Aber da in Netz sehr viele Beispiele zum MinGW mit DLL nicht funktionieren:Bei Compileraufruf sind 3 Leerzeichen und ein > zuviel.
g++ -shared -Wall -MM test_DLL.cpp > test_DLL.dep
g++ -shared -Wall -c test_DLL.cpp -o test_DLL.o
g++ -shared -Wall -o test_DLL.dll test_DLL.o