各种安装BUG记录

本博客是一个系列博客,记录了我碰到的各种软件安装问题。

Anaconda安装opencv3

最常见的使用Anaconda安装opencv3的命令:

conda install -c menpo opencv3

如果使用上述命令,可能会出现包冲突问题,我使用conda5.3.0=py37,出现了以下包冲突问题:

UnsatisfiableError: The following specifications were found to be in conflict:
- anaconda5.3.0=py37_0 -> hdf51.10.2=hba1933b_1
- anaconda5.3.0=py37_0 -> mkl-service1.1.2=py37h90e4bf4_5
- anaconda5.3.0=py37_0 -> numexpr2.6.8=py37hd89afb7_0
- anaconda5.3.0=py37_0 -> pango1.42.4=h049681c_0 -> harfbuzz[version='>=1.7.6,<2.0a0']> - anaconda5.3.0=py37_0 -> scikit-learn0.19.2=py37h4989274_0
- opencv3

解决这个问题参考了这个网址,使用下面的命令:

conda install -c conda-forge opencv

使用conda上述命令直接安装Opencv,可以正常使用,但是imshow依赖第三分GUI,无法正常显示图像,imshow出现下面的问题:

cv2.error: OpenCV(3.4.2) /tmp/build/80754af9/opencv-suite_1535558553474/work/modules/highgui/src/window.cpp:632: error: (-2:Unspecified error) The function is not implemented.

解决办法就是自己编译Opencv,打开开关GTK+2.x,这里给出我的cmake配置(下面一个bug index也讨论到了无法显示GUI的问题,下面的bug index给出的cmake没有配置python-opencv,这个给出编译python的cmake配置):

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_GTK2=ON -D WITH_OPENGL=ON -D PYTHON3_EXECUTABLE=~/anaconda3/bin/python3.7 -D PYTHON_INCLUDE_DIR=~/anaconda3/include/python3.7m -D PYTHON_LIBRARY=~/anaconda3/lib/python3.7/site-packages/numpy/core/include/ ..

cmake主要是打开GUI配置项WITH_GTK2=ON,配置python路径。

make -j7
make install

成功编译安装Opencv后,在python中还不能import cv2,还需要设置一下,取Opencv的安装路径下找到下面的文件(我的安装路径/usr/local):

/usr/local/lib/python3.7/site-packages/cv2.cpython-37m-x86_64-linux-gnu.so

复制到anaconda的site-packages,这个site-packages就是我们cmake配置里的那个。如果你不知道这个这个路径,可以在python代码中打印出来:

>>> import sys
>>> print(next(p for p in sys.path if 'site-packages' in p))
/home/maxliu/anaconda3/lib/python3.7/site-packages

接下来拷贝cv2文件:

cp /usr/local/lib/python3.7/site-packages/cv2.cpython-37m-x86_64-linux-gnu.so /home/maxliu/anaconda3/lib/python3.7/site-packages

python中成功import cv2参考

eclipse c++中不能添加带版本号的库

这里以libtorch为例来说明这个情况。

我们下载libtorch后,解压得到libtorch库如下:

libbenchmark.a                    libcaffe2_protos.a     libcudart-5d6d23a3.so.8.0.61  libnnpack.a                   libnvToolsExt-422e3301.so.1  libonnx_proto.a     libshm.so
libbenchmark_main.a libcaffe2.so libgomp-7bcb08ae.so libnnpack_reference_layers.a libonnx.a libprotobuf.a libtorch.so
libc10.so libclog.a libgomp-7bcb08ae.so.1 libnvrtc-56d4825a.so libonnxifi_dummy.so libprotobuf-lite.a libtorch.so.1
libcaffe2_gpu.so libcpuinfo.a libgtest.a libnvrtc-56d4825a.so.8.0.61 libonnxifi_loader.a libprotoc.a
libcaffe2_module_test_dynamic.so libcudart-5d6d23a3.so libgtest_main.a libnvrtc-builtins.so libonnxifi.so libpthreadpool.a

上面的库中,我们主要使用libtorch.so, 我们ldd看下libtorch.so的依赖项:

ldd libtorch.so

得到下面的依赖项:

maxliu@maxliu-tp:/data/source/libtorch/lib$ ldd libtorch.so
linux-vdso.so.1 => (0x00007ffc1d396000)
libnvToolsExt-422e3301.so.1 => /data/source/libtorch/lib/libnvToolsExt-422e3301.so.1 (0x00007f83c70de000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f83c6eda000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f83c6cd2000)
libcaffe2.so => /data/source/libtorch/lib/libcaffe2.so (0x00007f83be54d000)
libcaffe2_gpu.so => /data/source/libtorch/lib/libcaffe2_gpu.so (0x00007f839ce71000)
libc10.so => /data/source/libtorch/lib/libc10.so (0x00007f839cc59000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f839ca3c000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f839c733000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f839c3b1000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f839c19b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f839bdd1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f83c809b000)
libgomp-7bcb08ae.so.1 => /data/source/libtorch/lib/libgomp-7bcb08ae.so.1 (0x00007f839bba7000)

我们可以看到libtorch.so依赖libnvToolsExt-422e3301.so.1,这个so文件带版本号,而我们在eclipse中添加库时,只能添加so文件的名字,也就是nvToolsExt-422e3301, eclipse调用g++使用参数-l进行链接,即-lnvToolsExt-422e3301,在实际链接库会自动补上前缀lib和后缀so,所以无法找到带版本号的库,碰到这个问题,我目前还没有找到解决方法,不行的话我们还是写CMakeList来解决吧。

cmake编译安装Opencv3.4后,无法显示GUI

g++编译运行出现imshow无法显示的问题:

terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.2) /tmp/build/80754af9/opencv-suite_1535558553474/work/modules/highgui/src/window.cpp:632: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

按照error安装GTK和QT(linux下的gui支持),我下载Opncv3.4的版本安装QT4.x(注意这里不能安装QT5.x, 因为opencv3.4不支持配置QT5.x):

sudo apt-get update
sudo apt-get install qt4*o
sudo apt-get install qtcreator

安装GTK+2.x:

sudo apt-get install libgtk2.0-dev

配置Opencv, Cmkae命令如下:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_GTK2=ON -D WITH_OPENGL=ON ..
O

我试验了下,好像不能同时开启QT和GTK, 我这里开启了GTK+2.x(我也安装了GTK+3.x,我没有试验能不能顺利编译通过,有兴趣的可以试验下,使用WITH_GTK=ON默认会使用GTK+3.x)查看配置结果,GTK+2.x配置成功:

--   GUI:
-- GTK+: YES (ver 2.24.30)
-- GThread : YES (ver 2.48.2)
-- GtkGlExt: NO
-- OpenGL support: NO
-- VTK support: NO

我使用GTK+2.x成功了,如果你使用GTK+2.x失败,可以参考Stackoverflow, 配置使用GTK+3.x代替,安装GTK+3.x:

sudo apt-get install libgtk-3-dev

重新执行上面的cmake配置命令,make && make install.

编译Opencv bug

真的是莫名其妙的bug,整了一天,最后重装了protobuf就好了,真的很莫名其妙!!!

安装PIL

使用conda安装:

conda install pil

出现下面的bug:

UnsatisfiableError: The following specifications were found to be in 
conflict:
- pil -> python 2.6*
- python 3.6*

可能是由于pil包不支持跑一趟python3,安装pillow,同时支持python2和python3:

conda install pillow

Ubuntu系统问题

ubuntu 系统软件升级后出现下面问题:

manpath: can't set the locale; make sure $LC_* and $LANG are correct

由于系统语言环境设置出现问题,导致系统不能正常的工作,解决方法:

sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales (此处gui设置en_US.UTF-8)
sudo vim /etc/default/locale, 修改下面两项

LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8

重启后问题解决.

libtorch和gflags的编译安装问题 Linux中的磁盘挂载

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×