编译错误:未定义对'__atomic_fetch_add_4'的引用

Lit*_*oth 5 c++ ubuntu gcc opencv

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
  Mat img=imread("cornea.jpg");
  imshow("src",img);
  waitKey(0);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我编译它:

g++ main.cpp -o main `pkg-config opencv --cflags --libs`
Run Code Online (Sandbox Code Playgroud)

或者

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
Run Code Online (Sandbox Code Playgroud)

这给了我:

/tmp/ccoZCMRO.o?in function'cv::Mat::release()'?main.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x22)?未定义对'__atomic_fetch_add_4'
collect2的引用:错误:ld返回1退出状态

我在虚拟机的ubuntu 14.04的终端中使用opencv 3.1.0!

Spa*_*Bot 0

您似乎混合了 OpenCV 库的调试版本和发布版本。https://github.com/Itseez/opencv/issues/5581 您应该只包含并链接到正常的发布库,或者您自己构建的调试库。

就您而言,这可能来自 double include -cflags -I /usr/local/include/opencv。我会尝试删除所有手动路径并仅写入pkg-config --cflags --libs opencv(到打包的发布版本)。

请注意,这/usr/local/include是标准包含路径,并且将始终被搜索。您可以尝试使用https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html排除标准路径-nostdinc

另一种选择是卸载两个版本之一,或从标准路径中删除一个版本。