Pytorch_2: libtorch导致OPENCV错误:对‘cv::imread(std::string const&, int)’未定义的引用

1.错误描述

  • opencv 4.0.0
  • libtorch1.0.0 (官网下载,非源码安装)
  • gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
  • cmake version 3.5.1
Scanning dependencies of target frameworks
[ 50%] Building CXX object CMakeFiles/frameworks.dir/main.cpp.o
[100%] Linking CXX executable frameworks
CMakeFiles/frameworks.dir/main.cpp.o:在函数‘main’中:
/media/xx/data/cpps/frameworks/main.cpp:26:对‘cv::imread(std::string const&, int)’未定义的引用
collect2: error: ld returned 1 exit status
CMakeFiles/frameworks.dir/build.make:159: recipe for target 'frameworks' failed
make[3]: *** [frameworks] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/frameworks.dir/all' failed
make[2]: *** [CMakeFiles/frameworks.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/frameworks.dir/rule' failed
make[1]: *** [CMakeFiles/frameworks.dir/rule] Error 2
Makefile:118: recipe for target 'frameworks' failed
make: *** [frameworks] Error 2

2.错误原因

类似的参考资料

原因如下:

# TorchConfig.cmake  line 71
# When we build libtorch with the old GCC ABI, dependent libraries must too.
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  set(TORCH_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0")
endif()

(经过诸位大神的分析)TorchConfig.cmake文件中,让ABI=0,具体意思我也不大懂,貌似就关闭了CXX11_ABI,而opencv的东东就在这个里面呀,所以冲突,导致"对‘cv::imread(std::string const&, int)’未定义的引用",上面的第三个参考网址同样提到了这个问题.

3.解决办法

目前还在测试,主要考虑以下两个方面(opencv降版本,libtorch源码安装),测试结果我也会稍后告知.

  • 使用opencv3.4版本,(不想测试了,我同事说OK!),还是要装这个版本;
wget -c https://codeload.github.com/opencv/opencv/zip/3.4.3
wget -c https://codeload.github.com/opencv/opencv_contrib/tar.gz/3.4.3
cmake -D CMAKE_BUILD_TYPE=Releas \
           -D OPENCV_EXTRA_MODULES_PATH=/home/download/opencv_contrib-master/modules \
           -D WITH_TBB=ON \
           -D WITH_CUDA=OFF \
           -D WITH_CUBLAS=OFF \
           -D BUILD_NEW_PYTHON_SUPPORT=ON \
           -D WITH_V4L=ON \
           -D INSTALL_C_EXAMPLES=ON \
           -D INSTALL_PYTHON_EXAMPLES=ON \
           -D PYTHON2_EXECUTABLE=/usr/bin/python2 \
           -D PYTHON2_LIBRARY=/usr/lib/python2.7 \
           -D PYTHON2_INCLUDE_DIR=/usr/include/python2.7 \
           -D PYTHON2_NUMPY_INCLUDE_DIRS=/usr/lib/python2.7/dist-packages/numpy/core/include/ \
           -D PYTHON3_EXECUTABLE=/usr/bin/python3 \
           -D PYTHON3_LIBRARY=/usr/lib/python3.5 \
           -D PYTHON3_INCLUDE_DIR=/usr/include/python3.5 \
           -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3.5/dist-packages/numpy/core/include/ \
           -D BUILD_EXAMPLES=ON ..
#include "opencv2/imgproc/imgproc_c.h"
  • 使用源码安装libtorch(推荐),测试cv::imreadcv::imwrite成功.(划掉的部分应该是我搞错了)但是还是有未定义的引用问题发生在其他函数上面,cv::imshow,cv::namewindow,cv::waitkey等.所以我在重新源码安装libtorch的同时,opencv源码安装3.4.3版本.
    官方源码安装指南 https://github.com/pytorch/pytorch#from-source

法1.适合1.0rc版本,目前版本见法2

# libtorch的源码安装方法 
PYTORCH_COMMIT_ID="8619230"
git clone https://github.com/pytorch/pytorch.git
cd pytorch && git checkout ${PYTORCH_COMMIT_ID}
mkdir build && cd ./build
python3 ../tools/build_libtorch.py # 输出目录在./pytorch/pytorch/torch/lib/tmp_install

法2.源码安装pytorch1.2,@2019-06-10

conda activate torch # your conda env
conda install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing #python的依赖项,不行就把conda换pip
# Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda100 # or [magma-cuda92 | magma-cuda100 ] depending on your cuda version

git clone --recursive https://github.com/pytorch/pytorch # 下载源码
cd pytorch
# if you are updating an existing checkout
# 一直执行下面两行,直到没有错误发生,我的渣渣网,搞了几个小时。
git submodule sync
git submodule update --init --recursive #正常等待半小时

# 编译安装
python setup.py install #等待半小时

torchvision的源码安装 Torchvision 源码安装[Ubuntu]

git clone https://github.com/pytorch/vision.git
cd vision
python setup.py install

参考网

1.Building PyTorch with LibTorch From Source with CUDA Support
2.github的一些说明
3.利用Pytorch的C++前端(libtorch)读取预训练权重并进行预测
4.https://github.com/pytorch/pytorch#from-source

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容