【发布时间】:2016-06-23 10:17:31
【问题描述】:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img=imread("cornea.jpg");
imshow("src",img);
waitKey(0);
return 0;
}
我编译它:
g++ main.cpp -o main `pkg-config opencv --cflags --libs`
或
g++ main.cpp -o main -I/usr/local/opencv-3.1.0/include/opencv -I/usr/local/opencv-3.1.0/include -L/usr/local/opencv-3.1.0/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core -lpng -lz -ltiff -ljasper -ljpeg -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lfreetype -lgthread-2.0 -lglib-2.0 -ldc1394 -lv4l1 -lv4l2 -lavcodec -lavformat -lavutil -lswscale -ldl -lm -lpthread -lrt
这给了我:
/tmp/ccoZCMRO.o:in function ‘cv::Mat::release()’:main.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x22):未定义引用‘__atomic_fetch_add_4’
collect2:错误:ld 返回 1 个退出状态
我在VM的ubuntu 14.04终端使用opencv 3.1.0!
【问题讨论】:
-
可能还有一个更有趣的根本原因需要挖掘,但您尝试过
-march=native或-latomic吗? -
非常感谢你,我的朋友!
-march=native和-latomic都很有用!你能告诉它的根本原因吗? -
你需要一些原子操作的实现。 i386 没有合适的原子指令,所以你需要一个库实现(在 libatomic 中)。如果您让编译器知道您实际上对比 i386(比如 i686)更新的机器感兴趣,那么它可以直接使用适当的指令,而您不需要库。