编译错误:对'__ atomic_fetch_add_4'的未定义引用 [英] Compile error : undefined reference to‘__atomic_fetch_add_4’

查看:2997
本文介绍了编译错误:对'__ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆