编译Colmap出错 x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.

博客作者遇到了在编译Colmap时遇到的链接错误,涉及到libtiff库的不同版本导致的问题。通过查找系统中所有libtiff库的路径,确定需要替换链接的库文件。解决方案包括删除旧的软链接,创建指向正确版本libtiff.so.5的软链接,并重新编译Colmap。这个方法成功解决了编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译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

FreeImage下载
libtiff下载

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 目录编译,看是否编译成功。如果不成功,继续替换

然后应该就可以成功编译并且安装了
祝大家顺利!

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值