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.o

    gcc -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


Anmelden zum Antworten