Ich verwende Ubuntu Trusty und erstelle mit diesem Befehl den folgenden Code. Ich bin neu bei Clang und könnte Hilfe beim Debuggen dieser Fehler gebrauchen. Die cpp- und hpp-Dateien, aus denen diese C-Bindungen stammen, werden gut kompiliert. Ich habe die Header aus diesen Dateien in die folgende Datei kopiert, die ich hier aufgelistet habe, w.cpp
clang -std=c++11 w.cpp -o w `pkg-config --cflags --libs opencv`
Hier die Fehler:
/usr/bin/ld: /tmp/w-2a90f4.o: undefined reference to
symbol '_ZNSt8ios_base4InitD1Ev@@GLIBCXX_3.4'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding
symbols: DSO missing from command line
clang: error: linker command failed with exit code 1
(use -v to see invocation)
Hier ist der Inhalt von w.cpp. Ich versuche, Code mit Clang zu benchmarken.
#include <opencv2/c/mat.hpp>
#include <opencv2/c/opencv_generated.hpp>
using namespace cv;
using namespace std;
using namespace flann;
using namespace cvflann;
void cv_delete(char* self) {
delete self;
}
Mat* cv_create_Mat() {
return new Mat();
}
BFMatcher* cv_create_BFMatcher(int normType, bool crossCheck) {
return new BFMatcher(normType, crossCheck);
}
int main () {
for( int a = 1; a < 20; a++)
{
Mat a = &cv_create_Mat();
cv_delete(a);
}
}
c++filt
sagt, dass_ZNSt8ios_base4InitD1Ev
ist der verzierte/verstümmelte Name fürstd::ios_base::Init::~Init()
. Der@@GLIBCXX_3.4
ist eindeutig ein Tag zur Bibliotheksversionierung, aber ich kenne den Mechanismus nicht, wie es funktionieren soll.– Michael Burr
25. April 2014 um 7:02 Uhr
Versuchen Sie Folgendes hinzuzufügen:
-stdlib=libc++
– Brett Hale
25. April 2014 um 7:06 Uhr
@Brett Hale Danke, dass du meinen Beitrag kommentiert hast 🙂 … Das hat geholfen … jetzt erhalte ich /usr/local/include/opencv2/core/cvdef.h:343:12: fatal error: ‘cmath’ Datei nicht gefunden # include
– Benutzer3517736
25. April 2014 um 11:11 Uhr
falls jemand den gleichen Fehler mit bekommt
gcc
anstattclang
dann stellen Sie sicher, dass Sie verwendeng++
– Ciprian Tomoiagă
3. Oktober 2015 um 1:31 Uhr
Siehe dies, wenn Sie g ++ verwenden stackoverflow.com/questions/14888626/…
– Alan
9. Mai 2017 um 20:57 Uhr