C-Header (lib) im Cpp-Projekt (VS2017) -> Linker-Fehler



  • Hallo Leute,

    dieses Thema wurde schon extrem oft diskutiert, dennoch kriege ich es nicht behoben. Ich möchte in einem C++-Projekt unter Visual Studio 2017 C-Header einbinden und auf die entsprechenden Funktionen zugreifen. Allerdings bekomme ich immer einen Linker-Fehler.

    Hier ein Minimalbeispiel:

    main.cpp:

    #include <iostream>
    #include "test.h"
    
    int main()
    {
    	sayHello();
    	return 0;
    }
    

    test.h:

    #ifndef TEST_H_
    #define TEST_H_
    
    #include <stdio.h>
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    void sayHello();
    
    #ifdef __cplusplus
    }
    #endif
    
    #endif
    

    test.c:

    #include "test.h"
    
    void sayHello()
    {
    	printf("Hello");
    	return;
    }
    

    Folgender Fehler: main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_sayHello" in Funktion "_main"

    Ich verwende das erste mal Visual Studio, daher vermute ich, dass ich eventuell nur irgendwo ein Flag vergessen habe. Ich verwende keine vorkompilierten Header und der Ordner mit der C-Datei ("D:\VS17\Libs\Test") habe ich in den Projektpfaden hinzugefügt (Projekteinstellung --> C/C++ --> Allgemein --> "Zusätzliche Includeverzeichnisse"). Das Projekt selber ist in einem anderen Pfad "D:\VS17\Projects\LibTest". Leerzeichen im Pfad existieren also nicht. Boost und OpenSSL funktionieren problemlos, die auch in diesem Lib-Ordner sind. Was könnte es noch sein?

    Hat jemand einen Tipp?

    viele Grüße,
    SBond



  • Du musst die C Datei natürlich auch übersetzen und binden.

    Du hast wohl eher ein Problem mit deiner IDE als mit C ++.



  • vorher habe ich immer unter linux mit Eclipse und gcc gearbeitet. Dort funktioniert sowas problemlos. Momentan bin ich allerdings an Windows mit VS17 gebunden und ich habe mit VS kaum Erfahrung. Daher vermute ich auch, dass es eine Einstellung in der IDE ist. Bin die Projekteinstellungen schon mehrfach durchgeangen, aber ich finde nichts. ...zumindest ist es für mich nicht offensichtlich.

    ...ich versuche mal die Lib-Header direkt in mein Projktverzeichnis zu kopieren und zu übersetzen....

    EDIT: Ja, wenn ich die C-Dateien direkt in den Projektordner hinzufüge, dann geht es.

    Bei einer externen C-Lib, die nur aus .h und .c-Dateien besteht (ohne kompilierte .lib-Datei) ist das jedoch nicht so optimal. 😞

    ...mal sehen ob ich das irgendwie hinbekomme. 😋



  • Du musst die lib entweder als eigenes Projekt übersetzen oder die Dateien zu deinem Projekt hinzufügen.



  • ja. danke. Das hat geklappt 😃

    vielen Dank


Log in to reply