问题出现在我用ubuntu20.04上使用opencv3.4.1,其实ubuntu16.04+opencv3.4.1没问题以及ubuntu20.04+opencv4.4.0都没问题。但因某些原因要ubuntu20.04+opencv3.4.1,而opencv3.4.1需要的是PNG12,但自从ubuntu16.04后其他的ubuntu都已经丢弃了png12:
经过重重尝试:
1,download libpng12-0_1.2.54-1ubuntu1.1_amd64.deb by yourself and then run the following sentense:
sudo dpkg -i libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
但安装过程中显示:
正在选中未选择的软件包 libpng12-0:amd64。
(正在读取数据库 ... 系统当前共安装有 203035 个文件和目录。)
准备解压 .../libpng12-0_1.2.54-1ubuntu1.1_amd64.deb ...
正在解压 libpng12-0:amd64 (1.2.54-1ubuntu1.1) ...
dpkg: 处理归档 /home/SSD/workspace/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb (--install)时出错:
无法安装 /lib/x86_64-linux-gnu/libpng12.so.0 的新版本: 没有那个文件或目录
正在处理用于 libc-bin (2.31-0ubuntu9) 的触发器 ...
在处理时有错误发生:
/home/SSD/workspace/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
2,
wget -q -O /tmp/libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb \
&& dpkg -i /tmp/libpng12.deb \
&& rm /tmp/libpng12.deb
但安装过程中显示有一些问题
3,
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
echo "deb http://mirrors.kernel.org/ubuntu/ xenial main" | sudo tee -a /etc/apt/sources.list && sudo apt-get update && sudo apt install -y --allow-unauthenticated libpng12-0
sudo apt-get update && sudo apt install -y --allow-unauthenticated libpng12-0
但安装过程中显示:
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 204 个软件包未被升级。
需要下载 116 kB 的归档。
解压缩后会消耗 285 kB 的额外空间。
获取:1 http://mirrors.edge.kernel.org/ubuntu xenial/main amd64 libpng12-0 amd64 1.2.54-1ubuntu1 [116 kB]
已下载 116 kB,耗时 1秒 (127 kB/s)
(正在读取数据库 ... 系统当前共安装有 203209 个文件和目录。)
准备解压 .../libpng12-0_1.2.54-1ubuntu1_amd64.deb ...
正在解压 libpng12-0:amd64 (1.2.54-1ubuntu1) ...
dpkg: 处理归档 /var/cache/apt/archives/libpng12-0_1.2.54-1ubuntu1_amd64.deb (--unpack)时出错:
无法安装 /lib/x86_64-linux-gnu/libpng12.so.0 的新版本: 没有那个文件或目录
错误信息显示本地系统有一些问题,因此没有写入 apport 报告
在处理时有错误发生:
/var/cache/apt/archives/libpng12-0_1.2.54-1ubuntu1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
4,solved as the following shows https://tieba.baidu.com/p/6838166752:
sudo add-apt-repository ppa:linuxuprising/libpng12
sudo apt update
sudo apt install libpng12-0
最终靠第4个办法解决了"PNG12_0"的问题!
但现在有一个新问题:
symbol lookup error: /home/SSD/workspace/opencv3.4.1/lib/libopencv_imgcodecs.so.3.4: undefined symbol: _ZN7Imf_2_214ChromaticitiesC1ERKN9Imath_2_24Vec2IfEES5_S5_S5_
这个尚未解决。
/**********ubuntu16.04中使用opencv4.4.0(opencv4.4.0是在ubuntu20.04中编译并测试通过,然而给ubuntu16.04中使用时出现如下问题)***********/
/usr/bin/ld: warning: libpng16.so.16, needed by /home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libIlmImf-2_3.so.24, needed by /home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so, not found (try using -rpath or -rpath-link)
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::OutputFile::setFrameBuffer(Imf_2_3::FrameBuffer const&)’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_get_io_ptr@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::chromaticities(Imf_2_3::Header const&)’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::InputFile::setFrameBuffer(Imf_2_3::FrameBuffer const&)’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_get_tRNS@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘powf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::FrameBuffer::end()’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::runtime_error::runtime_error(std::runtime_error&&)@GLIBCXX_3.4.26’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_error@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_set_strip_16@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::ChannelList::findChannel(char const*) const’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_set_tRNS_to_alpha@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::OutputFile::~OutputFile()’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_init_io@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘log@GLIBC_2.29’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘expf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_read_update_info@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::OutputFile::writePixels(int)’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_read_info@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::InputFile::InputFile(char const*, int)’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::Header::channels()’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_set_gray_to_rgb@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘__cxa_init_primary_exception@CXXABI_1.3.11’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::FrameBuffer::begin()’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_set_rgb_to_gray@PNG16_0’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘Imf_2_3::Header::Header(int, int, float, Imath_2_3::Vec2<float> const&, float, Imf_2_3::LineOrder, Imf_2_3::Compression)’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘png_destroy_read_struct@PNG16_0’未定义的引用
1,apt-get install libpng16-dev
2,download libIlmImf...rpm file
website:https://rpmfind.net/linux/rpm2html/search.php?query=libIlmImf-2_3.so.24%28%29%2864bit%29&submit=Search+...&system=&arch=
And then solved as the following shows:
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install alien
sudo alien <name of package>.rpm
sudo dpkg -i <name of package>.deb
sudo alien -i <name of package>.rpm
3,
/usr/bin/ld: warning: libHalf.so.24, needed by //usr/lib64/libIlmImf-2_3.so.24, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libIex-2_3.so.24, needed by //usr/lib64/libIlmImf-2_3.so.24, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libIlmThread-2_3.so.24, needed by //usr/lib64/libIlmImf-2_3.so.24, not found (try using -rpath or -rpath-link)
solution:website: https://www.rpmfind.net/linux/rpm2html/search.php?query=libIlmThread-2_3.so.24()(64bit) download the fittable version of lib64ilmbase24-2.3.0...rpm and then install it.
4,
Invoking: GCC C++ Linker
g++ -std=c++11 -L/home/jumper/workspace/opencv4.4.0/lib -L/home/jumper/workspace/tensorflow_cc/lib -o "PredictCharacters" ./src/charactersPredict.o ./src/text_detection.o ./src/wglastversion.o -lpthread -ltensorflow_cc -ltensorflow_framework -lopencv_world
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘powf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::runtime_error::runtime_error(std::runtime_error&&)@GLIBCXX_3.4.26’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘log@GLIBC_2.29’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘expf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘__cxa_init_primary_exception@CXXABI_1.3.11’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘pow@GLIBC_2.29’未定义的引用
makefile:45: recipe for target 'PredictCharacters' failed
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘log2f@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::__exception_ptr::exception_ptr::exception_ptr(void*)@CXXABI_1.3.11’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘exp@GLIBC_2.29’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream()@GLIBCXX_3.4.26’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘logf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)())@GLIBCXX_3.4.22’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::thread::_State::~_State()@GLIBCXX_3.4.22’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::logic_error::logic_error(std::logic_error&&)@GLIBCXX_3.4.26’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘typeinfo for std::thread::_State@GLIBCXX_3.4.22’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘std::__cxx11::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::basic_stringstream()@GLIBCXX_3.4.26’未定义的引用
collect2: error: ld returned 1 exit status
make: *** [PredictCharacters] Error 1
solution:https://www.jianshu.com/p/7a8878397213
install gcc9.3.0 and g++ 9.3.0
5,
g++: fatal error: ‘-fuse-linker-plugin’, but liblto_plugin.so not found
https://www.wetimer.com/bai-du-aistudio-an-zhuang-pycorrecotor/
/usr/libexec/gcc/x86_64-alt-linux/9 下的相关库文件拷贝到 /usr/lib/gcc/x86_64-linux-gnu/9
6,
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘powf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘log@GLIBC_2.29’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘expf@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘pow@GLIBC_2.29’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘log2f@GLIBC_2.27’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘exp@GLIBC_2.29’未定义的引用
/home/jumper/workspace/opencv4.4.0/lib/libopencv_world.so:对‘logf@GLIBC_2.27’未定义的引用
make: *** [PredictCharacters] Error 1
https://blog.csdn.net/wu_cai_/article/details/104770005
到第6个问题时,我现在不准备这样搞了,哪怕可能这个问题解决完就跑得起来了。我还是准备重新在ubuntu16.04下编译opencv4.4.0。这种兼容问题一个个冒出来太烦了。
于是我重新在16.04下编译opencv4.4.0,过程不必细说前面已经编译过那么多次了。
但中途还是有点小问题,首先我有几个版本的gcc,于是我切换回原来的5.4.0版本:
1,change gcc and g++
update-alternatives --config gcc
update-alternatives --config g++
gcc -v
g++ -v
但还是不行,下载任何一个东西都报错说:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
您可能需要运行“apt-get -f install”来纠正下列错误:
下列软件包有未满足的依赖关系:
g++-9 : 依赖: gcc-9 (= 9.3.0-10ubuntu2~16.04) 但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt-get -f install”(也可以指定一个解决办法)。
于是我最终按照 https://jingyan.baidu.com/article/ab0b563047b86ac15bfa7d4a.html 卸载掉所有的gcc g++,然后再重新下载就OK了。
之后编译无任何问题,现在已跑起来:
/*************Nsight eclipse edition***************/
CUDA工程已经跑过了,没问题。但是我想profile去看CPU and GPU timeline时出现:
查到这是CUPTI没有加入环境变量导致,加入环境变量后,重来,出现点击下图按钮无任何反应,CPU and GPU timeline根本没有出来!!!我不知道这个按钮难道是放在这里好看的吗,又不能使用,也没有任何报错!!!按道理应该是可以使用的啊,就在这个IDE里运行,运行完了分析性能多好,就应该是这么设计的:
而我看了下,我单独打开Nvidia visual profiler是可以的:
所以现在搞得只能用指令在终端看其有没有bankconflict:
大神说想看timeline的话,对于我7.5的卡只能将nvprof的信息导出到nvvp中, 然后使用nvidia visual profiler生成timeline
另外大神说卡的计算能力不是越高越好:
失策啊买卡的时候!
/*********************CUDA版距离变换*********************************/
想象很丰满,现实很骨感。看GPU上的耗时达到了十几毫秒,而CPU版本只要2~3ms!!!这个设计我请教过别人 https://bbs.gpuworld.cn/index.php?PHPSESSID=4b3dvlop06orllts3eh8ddfp02&topic=73406.0 但是没有更好的办法。这种设计就是会耗时,每次启动核函数都是对全局内存读、写一次!可以看到每次核函数运行平均408us,那么24次就到了9.8ms!!!!
另外大神给了一个建议,即还是得将共享内存用起来,但我的算法又需要访问其它块的内容所以需要拼接边界,这个不一定能实现,我还在想。如果真的能实现,那一个数量级的差别也就是只要1个多ms,还是很诱人的。但就是不好实现,要好好想:
另外还有一个解决办法,就是算法流程更改,还记得我之前提到过的那篇距离变换全并行的英文论文吗?那个如果实现,效率会很可观,之前看不懂,现在看懂了一半:
可以看到从2D的描述这里我就开始不懂了。如果有大神理解请点拨一下鄙人。这个在之前的距离变换相关的文章里有论文出处。