Referenzierung von C-Funktionen in statischen Bibliothek von C++
Habe ich eine statische Bibliothek mit Funktionen geschrieben in C. wir sagen, dass die header-Datei heißt myHeader.h und sieht wie folgt aus:
#ifndef MYHEADER_H
#define MYHEADER_H
void function1();
void function2();
#endif
function1 und function2 sind nichts allzu besonderes. Lassen Sie uns sagen, Sie existieren in einer Datei namens impl1.c, die wie folgt aussieht:
#include "myHeader.h"
void function1() {
//code
}
void function2() {
//more code
}
Alle der code bisher genannten ist zusammengestellt in einigen statischen Bibliothek mit dem Namen libMyLib.ein. Ich würde lieber nicht ändern, der code zum erstellen dieser Bibliothek. Ich habe auch eine C++ - header (cppHeader.h), die wie folgt aussieht:
#ifndef CPPHEADER_H
#define CPPHEADER_H
class CppClass {
private:
double attr1;
public:
void function3();
};
#endif
Dann cppHeader.cpp sieht aus wie:
#include "cppHeader.h"
#include "myHeader.h"
//constructor
CppClass::CppClass(){}
void CppClass::function3() {
function1();
}
Wenn ich versuche zu kompilieren, bekomme ich eine Fehlermeldung über eine nicht definierte Verweis auf function1(). Ich glaube, dass ich verlinkt hast alles richtig beim kompilieren. Ich bin ziemlich eingerostet in meinem C++. Ich bin mir sicher, dass ich mich gerade etwas dumm. Ich hoffe, dass meine einfachen Beispiel-code veranschaulicht das problem gut genug.
Vielen Dank im Voraus für jede Hilfe!!!
- Kann nicht sagen nichts über
C++
, aber inC
möchten Sie vielleicht, um Ihre Funktionsdeklarationen richtigen Prototypen ... geben Sie einfachvoid
für die Parameter:void function1(void);
- Ich dachte, dass war nicht "erforderlich" ist seit 1989!
- parashift.com/c++-faq-lite/mixing-c-and-cpp.html
- In der aktuellen C99
void function1();
ist eine Erklärung;void function2(void);
ist ein Prototyp. Je nachdem, wie es implementiert ist, können Sie rufen Sie function1 alsfunction1();
oderfunction1(foobar)
oder ...; function2 muss aufgerufen werden, wiefunction2()
und entsprechend umgesetzt. - Interessant. Zeigt an, wie viel C ich verwenden!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die andere Lösung (auf die man schlug vor, die ursprünglich von Yann) ist, umgeben Sie Ihre "C" - header mit:
Welche speichert Sie vom müssen daran denken dies zu tun:
jeden Ort, den Sie verwenden
foo.h
Stellen Sie sicher, zu verwenden:
Sonst der C++ compiler generiert symbol-Namen die name-Mangling.