【发布时间】:2014-06-10 18:02:04
【问题描述】:
我在 Ubuntu Trusty 上,我正在使用此命令构建以下代码。我是 clang 的新手,我可以帮助调试这些错误。这些 C 绑定来自编译好的 cpp 和 hpp 文件。我将这些文件中的标头复制到我在此处列出的以下文件中,w.cpp
clang -std=c++11 w.cpp -o w `pkg-config --cflags --libs opencv`
以下是错误:
/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)
这是 w.cpp 的内容。我正在尝试使用 铛。
#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表示_ZNSt8ios_base4InitD1Ev是std::ios_base::Init::~Init()的修饰/损坏名称。@@GLIBCXX_3.4显然是一些库版本控制标签,但我不知道它应该如何工作的机制。 -
尝试添加:
-stdlib=libc++ -
@Brett Hale 感谢您对我的帖子发表评论:)...这确实有帮助...现在我得到 /usr/local/include/opencv2/core/cvdef.h:343: 12: 致命错误: 'cmath' file not found #include
-
如果有人使用
gcc而不是clang遇到同样的错误,请确保使用g++ -
如果您使用的是 g++,请查看此内容stackoverflow.com/questions/14888626/…