Mein Ziel ist das Erstellen einer gemeinsam genutzten Bibliothek aus C++ erstellt. Und ich möchte aus einem C-Programm in der Bibliothek eine Funktion aufzurufenRufen Sie eine Funktion in shared .so von C
Ich habe einen compareImage.h:
#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
EXTERNC int compareTwoImages();
#undef EXTERNC
und eine compareImage.cpp Datei:
#include "SURF_Homography.h"
extern "C" int compareTwoImages(){
..
}
ich bereits erstellt haben eine gemeinsam genutzte Bibliothek mit diesem Befehl:
g++ -ggdb `pkg-config --cflags opencv` -fpic -shared compareImage.cpp -o libcompareImage.so `pkg-config --libs opencv`
Dann schreibe ich ac Programm compareTwoImages() aufzurufen, f Salbung von diesem gemeinsamen lib wie folgt aus:
#include <stdio.h>
int main() {
/* my first program in C */
int test = compareTwoImages();
printf("Comparison Results: %d\n", test);
return 0;
}
und kompilieren Sie es mit diesem Befehl:
gcc -lcompareImage c_call_cpp.c -o callCpp.o
Aber es zeigt einen Fehler:
/tmp/cc0wuZTU.o: In function `main':
c_call_cpp.c:(.text+0xe): undefined reference to `compareTwoImages'
collect2: error: ld returned 1 exit status
Ich weiß also nicht, was die Das Problem ist.
Das Problem ist, dass Sie nicht Ihr Programm mit Ihrer gemeinsam genutzten Bibliothek verknüpfen. Nur weil irgendwo auf der Festplatte eine Datei ist, mit der Funktion, die der Code benutzt, bedeutet das nicht, dass der Compiler automatisch weiß, wo er ist. Sie müssen explizit mit dieser gemeinsam genutzten Bibliothek eine Verbindung herstellen (und sicherstellen, dass sie sich zur Laufzeit im Suchpfad der gemeinsam genutzten Bibliothek befindet). Siehe 'ld (1)' 's Dokumentation für die Option '-l', die Sie über gcc weitergeben können. –
Zum einen sollte die Bibliothek -lcompareImage nach c_call_cpp.c kommen. –
Danke Sam und Anon. Mein Fehler ist -lcompareImage vor c_call_cpp.c, Es funktioniert jetzt. –