编译Colmap大片出错(已解决)
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFReadEXIFDirectory@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFFieldReadCount@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFSetTagExtender@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFCurrentDirectory@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFReadTile@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFSetDirectory@LIBTIFF_4.0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFClientOpen@LIBTIFF_4.0'
研究了很多天一直无法解决。网上有说是调用了anaconda中的QT5,我查看CMAKE输出,发现并没有anaconda什么事情。以下是我的修改方案,亲测有效
注意 FreeImage版本为 3.18.0 libtiff版本:4.0.4
Step1: 在 ~/colmap/build/ 目录下, 查看找到的Qt的目录并且记住,后面要用到。 例如我这里的是 /usr/lib/x86_64-linux-gnu
vrlab@vrlab3022:~/qys/colmap/build$ cmake ..
Step2: 输入下面命令,手动找到当前系统所有的libtiff.so的路径
(如果系统中有anaconda,会显示较多条目)
vrlab@vrlab3022:~$ locate libtiff.so
/home/vrlab/qys/lib/tiff-4.0.4/libtiff/.libs/libtiff.so
/home/vrlab/qys/lib/tiff-4.0.4/libtiff/.libs/libtiff.so.5
/home/vrlab/qys/lib/tiff-4.0.4/libtiff/.libs/libtiff.so.5.2.2
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libtiff.so.5
/snap/gnome-3-34-1804/72/usr/lib/x86_64-linux-gnu/libtiff.so.5.3.0
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libtiff.so.5
/snap/gnome-3-34-1804/77/usr/lib/x86_64-linux-gnu/libtiff.so.5.3.0
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libtiff.so.5
/snap/gnome-3-38-2004/87/usr/lib/x86_64-linux-gnu/libtiff.so.5.5.0
/snap/snap-store/547/usr/lib/x86_64-linux-gnu/libtiff.so.5
/snap/snap-store/547/usr/lib/x86_64-linux-gnu/libtiff.so.5.3.0
/snap/snap-store/558/usr/lib/x86_64-linux-gnu/libtiff.so.5
/snap/snap-store/558/usr/lib/x86_64-linux-gnu/libtiff.so.5.5.0
/usr/lib/x86_64-linux-gnu/libtiff.so
/usr/lib/x86_64-linux-gnu/libtiff.so.5
/usr/lib/x86_64-linux-gnu/libtiff.so.5.5.0
/usr/local/lib/libtiff.so
/usr/local/lib/libtiff.so.5
/usr/local/lib/libtiff.so.5.4.0
Step3: 接着输入下方命令,找到依赖文件后,下一步是替换文件其他位置的库文件的路径
vrlab@vrlab3022:~/qys/colmap/build$ ldd /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libfreeimage.so
Step4: 手动逐个替换Step2中找到的libtiff 库文件
编译colmap报错原因是编译安装libtiff不同版本时候,libtiff可能会在系统下生成的名字不同(如下图)而Step3中显示链接的名字就是叫libtiff.so.5 因此可能链接到的是老版本的libtiff。所以我们需要替换。
替换方式可以是创建软链接
ln -s 源文件 目标文件
替换过程如下:
1、把原本链接到的文件删掉
vrlab@vrlab3022:~/qys/colmap/build$ sudo rm /usr/local/lib/libtiff.so.5
2、采用软链接进行链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5.5.0 /usr/local/lib/libtiff.so.5
3、进入colmap/build 目录编译,看是否编译成功。如果不成功,继续替换
然后应该就可以成功编译并且安装了
祝大家顺利!