Zum Inhalt springen

C++ Bibliothek in C Programm einbinden


Shamharoth

Empfohlene Beiträge

Hallo zusammen.

Ich bin schon die ganze Zeit am schauen, find jedoch nichts gscheids.

Ausgangssituation (C/C++ - Programmierung unter Linux/Eclipse):

Ich habe eine staatische Klasse geschrieben (nennen wir sie mal lib.a) und diese besitzt eine funktion (.. libfunc() )

Jetzt möchte ich gerne, dass diese funktion in sowohl C als auch C++ Programme genutzt werden kann. Über diese Funktion werden dem Umständen entsprechend andere Funktionen aufgerufen, die die Übergabevariablen als wstring bekommen (Wegen UTF ... ) und verarbeiten.

Die Funktion libfunc(...) habe ich so geschrieben, dass der Input als char* übergeben wird und diese an die interne Funktionen als wstring übergibt (nach 2maliger Konvertierung in string un dann wstring). Zudem wird ein Boolscher Wert von den internen Funktionen bis ganz nach aussen abgefeuert.

Wie kann ich nun die Lib so einstellen, dass ich diese auch mit dem C programm laufen lassen kann?

Zwar hab ich vereinzelt Treffer gefunden die über "extern "C"" gingen, haben jedoch nicht funktioniert, da warsch. diese einträge zudem um cpp-dateien in einem c projekt gingen.

Danke im voraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

mit extern C hab ich schon viel rumprobiert.

ich habe es momentan so gemacht (jetzt genauer als 1. Post)

Libprojekt

->.cpp - Datei mit libfunc() mit include auf header der funktionen (nächste zeile)

->.cpp - Datei mit funktionen

c++projekt

->.cpp - Datei mit der Mainfunktion

->.h - Datei mit Deklaration der libfun()

->.a - compilierte libdatei

(FUNKTIONIERT)

cprojekt

->.c - Datei mit der Mainfunktion

->.h - Datei mit Deklaration der libfun()

->.a - compilierte libdatei

(fuktioniert nicht)

Wenn ich mit gcc kompilieren will (habe eine eigene makefile an der es nicht liegen kann) kommen unter anderem folgende Fehler:

src/inputchecker.cpp:147: undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator[](unsigned int)'

src/inputchecker.cpp:147: undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator[](unsigned int)'

src/inputchecker.cpp:147: undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::operator[](unsigned int)'

hier der header, der im c-projekt auf die funktion in der library zeigen soll:

#ifdef __cplusplus

extern "C"

{

#endif

	bool InputCheck(char* Input, char* Type);

#ifdef __cplusplus

}

#endif
hier die funktionsdefinition in der library:
#ifdef __cplusplus

extern "C"

{

#endif

	bool InputCheck(char* Input, char* Type){

		return InputChecker(Input,Type);

	}

#ifdef __cplusplus

}

#endif

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Fehlermeldungen kommen aus C++-Quellcode. Du kannst natürlich nur das C-Projekt mit GCC kompilieren.

jopp das is verständlich. jedoch versteh ich nicht warum er da rummeckert :/ laud meiner makefile bleibt er in seinem projektordner.

das sind die zwei kompilierungsanweisungen, die die makefile ausführt:

gcc -g -c -Wall -Wshadow -Wbad-function-cast -Wsign-compare -Wcast-align -Iinclude/ src/tester.c -o objs/tester.o

gcc -g -lm -lrt objs/tester.o lib/libinputchecker.a -o prog

meine lib habe ich ja sogar in den ordner kopiert und die makefile nutzt die .a file ja auch zum linken. ... was ich auch grade seh spuckt er als ersten Fehler

lib/libinputchecker.a(inputchecker_c.o):(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'

aus. im inputchecker_c.o steht nur die Funktion, die für C und C++ genutzt werden soll (die funktion mit 'extern "C" ')

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke erstmal. Jetzt kompiliert er (Habe nur falsch den Flag gesetzt).

Jedoch habe ich jetzt ein kleines Problem im Code. Eclipse meckert bei einer strcpy funktion.

Ich habe ein String sInput und ein char Pointer auf ein char Array cInput.

Jetzt wollte ich den Inhalt von String in Char Koppieren:

strcpy(cInput,sInput.c_str());

Im C++ Code funktioniert dieser, beim C Programm meint jedoch wenn ich die Anweisung debugge:

No source available for "strcpy() "
Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab jetzt weitr drann rumgetestet und mir ist aufgefallen, dass ich ein Element von dem Übergebenen Pointer / Array verändere, wird der Pointer/Array im C programm NICHT geändert. ... strange o_O

ich habe jedoch auch als Überparameter char* cInput stehen.

und cInput[0]='X' hat keine Auswirkung auf die übergeordneten Funktionen.

hmm seltsam :/ manche posts haben einen "ändern" button, manche nicht

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...