Ubuntu 16.04 编译安装opencv 3.4.6过程和 anaconda3/lib/libtiff.so.5: undefined reference to `ZSTD_freeCStre

这篇博客详细记录了在Ubuntu 16.04上编译OpenCV 3.4.6的过程,包括下载源码、安装依赖、编译和安装步骤。在编译过程中遇到了由于anaconda3导致的libtiff.so.5链接错误,提示找不到libzstd.so.1.3.7。解决方案是删除anaconda环境变量,并清理编译文件后重新编译。完成编译后,通过sudo make install进行安装,并配置环境变量。

1.到https://opencv.org/releases/下载源码 opencv-3.4.6.zip

2.安装必要的依赖库和包

sudo apt-get install cmake # 安装cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev libjasper-dev

3.切换到opencv-3.4.6目录

cd ~/Downloads/opencv-3.4.6
mkdir build
cd build #切换目录然后cmake指定安装路径
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

在这里插入图片描述

4. 编译安装

make -j16

在这里插入图片描述
在这里插入图片描述
出现下面的错误:
/usr/bin/l

/usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_close': content_encoding.c:(.text+0x62): undefined reference to `ZSTD_freeDStream' /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_init': content_encoding.c:(.text+0x89): undefined reference to `ZSTD_createDStream' /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_write': content_encoding.c:(.text+0x125): undefined reference to `ZSTD_decompressStream' /usr/bin/ld: content_encoding.c:(.text+0x12d): undefined reference to `ZSTD_isError' collect2: error: ld returned 1 exit status make[2]: *** [examples/cpp/CMakeFiles/ColorMapOptimization.dir/build.make:200:bin/examples/ColorMapOptimization] 错误 1 make[1]: *** [CMakeFiles/Makefile2:5071:examples/cpp/CMakeFiles/ColorMapOptimization.dir/all] 错误 2 make[1]: *** 正在等待未完成的任务.... /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_close': content_encoding.c:(.text+0x62): undefined reference to `ZSTD_freeDStream' /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_init': content_encoding.c:(.text+0x89): undefined reference to `ZSTD_createDStream' /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_write': content_encoding.c:(.text+0x125): undefined reference to `ZSTD_decompressStream' /usr/bin/ld: content_encoding.c:(.text+0x12d): undefined reference to `ZSTD_isError' collect2: error: ld returned 1 exit status make[2]: *** [examples/cpp/CMakeFiles/CameraPoseTrajectory.dir/build.make:200:bin/examples/CameraPoseTrajectory] 错误 1 make[1]: *** [CMakeFiles/Makefile2:5004:examples/cpp/CMakeFiles/CameraPoseTrajectory.dir/all] 错误 2 /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_close': content_encoding.c:(.text+0x62): undefined reference to `ZSTD_freeDStream' /usr/bin/ld: ../../curl/lib/libcurl.a(content_encoding.c.o): in function `zstd_do_init': content_encoding.c:(.tex
09-10
编译时 `/usr/bin/ld` 提示的 `undefined reference to` 错误通常表示链接器在链接过程中找不到所需的库或符号。以 `undefined reference to ‘lzma_stream_buffer_decode` `undefined reference to `ZSTD_...` 这类错误为例,可参考以下思路解决: ### 检查库是否安装 若报错是因为缺少特定库文件,像 `undefined reference to ‘lzma_stream_buffer_decode` 是由于 `B` 机器未安装 `liblzma` 库,使用 `cmake find_library` 验证确实找不到该库。对于 `undefined reference to `ZSTD_freeDStream`,需确认系统中是否安装了包含 `ZSTD_freeDStream` 符号的 `ZSTD` 库。可通过如下命令检查: ```bash dpkg -l | grep zstd ``` 若未安装,可使用包管理器进行安装,以 `Ubuntu` 为例: ```bash sudo apt-get install libzstd-dev ``` ### 检查库路径 即使库已安装,链接器也可能因找不到库的路径而报错。可通过以下命令查看系统库路径: ```bash echo $LD_LIBRARY_PATH ``` 若库不在该路径下,可临时添加库路径: ```bash export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH ``` 或者将路径永久添加到 `~/.bashrc` 文件中: ```bash echo 'export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` ### 检查编译选项 在编译时,需确保正确指定了库文件。例如,若要链接 `ZSTD` 库,可在编译命令中添加 `-lzstd` 选项: ```bash g++ your_source_file.cpp -o your_program -lzstd ``` ### 环境变量问题 若使用了虚拟环境(如 `anaconda`),环境变量可能会影响编译。可参考 `Ubuntu 16.04 编译安装 opencv 3.4.6` 的处理方式,去掉 `anaconda` 的环境变量后重新编译。查看环境变量: ```bash echo $PATH ``` 修改环境变量(去掉含有 `anaconda` 的路径): ```bash export PATH=/path/without/anaconda:$PATH ``` 删除编译目录后重新编译: ```bash rm -r release # 重新开始编译步骤 ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值