编译错误:对'__ atomic_fetch_add_4'的未定义引用 [英] Compile error : undefined reference to‘__atomic_fetch_add_4’
问题描述
#include< opencv2 / opencv.hpp>
使用命名空间cv;
int main()
{
Mat img = imread(cornea.jpg);
imshow(src,img);
waitKey(0);
返回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 / c coZCMRO.o:in function'cv :: Mat :: release()':main.cpp :(。text._ZN2cv3Mat7releaseEv [_ZN2cv3Mat7releaseEv] + 0x22):未定义的引用'__ atomic_fetch_add_4'
collect2:错误:ld返回1退出状态
我在ubuntu 14.04的VM终端中使用opencv 3.1.0!
在i386上,您需要添加 -latomic
使用汇编程序指令,但必须回退到libatomic库实现。
从i586开始,原子指令可用,并且不再需要链接到libatomic。这意味着, -latomic
的替代方法是使用 -march = i586
。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img=imread("cornea.jpg");
imshow("src",img);
waitKey(0);
return 0;
}
And I compile it with:
g++ main.cpp -o main `pkg-config opencv --cflags --libs`
or
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
Which gives me:
/tmp/ccoZCMRO.o:in function‘cv::Mat::release()’:main.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x22):undefined reference to‘__atomic_fetch_add_4’
collect2: error: ld returned 1 exit status
I am using opencv 3.1.0 in the terminal of ubuntu 14.04 in VM!
On i386, you need to add -latomic
as GCC cannot use assembler instructions but has to fallback on the libatomic library implementation.
Starting with i586, atomic instructions are available and linking against libatomic is no longer required. That means, the alternative of -latomic
is to use -march=i586
.
这篇关于编译错误:对'__ atomic_fetch_add_4'的未定义引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!