ubuntu20.04 编译安装早期版本(如2.2.1)的OpenEXR

ubuntu20.04 编译安装早期版本(如2.2.1)的OpenEXR

在一些slam问题相关的源码编译时,往往需要OpenEXR。有一些SOTA的slam相关工作是比较早期完成的,当时依赖的OpenEXR版本可能比较早。本文介绍如何在较新的系统下自行编译安装老版本OpenEXR。

apt 安装存在的问题

对于比较新的系统,apt很可能是找不到老版本库的。
apt 安装openexr可以直接通过:

sudo apt install libopenexr-dev

得到。但是一般是比较新的版本,比如ubuntu 20.04会安装2.3.0版本的openexr。
老版本的经过个人尝试,无法通过指定版本号、更换apt源等操作实现。

自己编译安装

release版本的openexr源码可以在这里下载,要注意源码与编译后库文件的匹配。
以 libIlmImf库为例,其动态链接库的命名是 libIlmImf-a_b.so.xx这里a_b是大版本号,xx是小版本号。例如2.2.0的源码编译后得到libIlmImf-2_2.so.22, 而2.2.1编译后得到libIlmImf-2_2.so.23。要弄清楚需要编译后的库文件的版本。

首先下载源码的压缩包并解压。openexr的github上有一份相关教程但是适用于新版本的源码,对于之前版本源码,其文件结构与编译方式并不相同。

以我安装的openexr-2.2.1为例,解压后目录结构如下:
在这里插入图片描述
这里我本来是直接进入OpenEXR进行编译,但是出现了 无法找到 “half.h” 的错误。

实际上我们需要先编译IlmBase。
需要的依赖在这里有说明,主要就是编译器要兼容C++11,Zlib,cmake>=3.10这样。

编译安装过程

编译 IlmBase

第一步进入 IlmBase 目录,可以看到这里有CMakeList.txt,我们可以在此处新建一个build目录(其他地方也可以,这里比较容易找到)并进入这个目录

mkdir build
cd build

在这里运行cmake

cmake ..

参数是CMakeList.txt所在的目录,请根据实际情况自行修改。
成功后运行

make

接着运行

sudo make install

这里要加sudo是因为这个库默认会把编译后的库的库文件以及头文件放在/usr/local/lib以及/usr/local/include里面,不加sudo是没有权限的。而且按照Ubuntu文件结构,一般自行编译的库确实是放在/usr/local中。

成功后就可以在/usr/local/lib找到libIlm*开头的so文件和la文件,分别是动态链接与静态库。此时可以核对一下库的版本是否是所需。同时在/usr/local/include/OpenEXR目录下找到头文件。

编译OpenEXR

接下来编译OpenEXR。
同样进入到解压后的OpenEXR目录,在这里我们也可以找到CMakeList.txt文件,要注意这里我们需要修改一下这个CMakeList.txt。
原因是本模块编译依赖于 half.h头文件,而这个头文件在刚刚编译IlmBase 时被放在/usr/local/include/OpenEXR里面了。
所以打开这里的CMakeList.txt,添加一行:

INCLUDE_DIRECTORIES(/usr/local/include/OpenEXR)

然后类似的,新建build目录并编译安装:

mkdir build
cd build
cmake ..
make
sudo make install

安装完成即可。
在安装时命令行会提示将运行时路径修改为/usr/local/lib等我们安装时预设的路径。这意味着安装后有可能不需要额外设置环境变量或修改依赖此库的其他项目的编译参数。当然如果遇到安装成功但安装后续依赖此库的项目是找不到文件,那可能还需要对路径加以配置。

以上就是在Ubuntu20.04下手动编译比较老版本OpenEXR的过程。希望对大家有所帮助。

在遇到 `E: Unable to locate package` 错误时,这通常表示软件包管理器(如Ubuntu的`apt`)无法找到指定的软件包。当你尝试安装`libxcb-syndev` 和 `libxcb-util-dev` 包时,同样遇到了这个问题。 要解决这个问题,你可以尝试以下几个步骤: 1. **更新软件源**: 使用 `sudo apt-get update` 或者 `sudo apt update` 命令来确保你的包索引是最新的。 2. **查找替代包名**: 可能这些包的名称有变化,可以尝试搜索它们的新名字。例如,`libxcb-syndev` 可能已经被更改为 `libxcb-sys-dev` 或类似的名称。你可以通过命令 `apt search xcb-syndev` 或 `apt search xcb-util-dev` 来查看可能的匹配项。 3. **修正依赖脚本**: 如果上述方法无效,你可以继续编辑依赖安装脚本,替换错误的包名。对于`libxcb-syndev` 和 `libxcb-util-dev`,可能是 `libxcb-sys-dev` 和 `libxcb-util0-dev`,记得在编辑时保持正确的包类型和版本。 4. **分批安装**: 可以试着分开安装各个单独的包,避免一次性列出太多可能导致查找失败的包。比如先安装 `libgudev-1.0-dev`,然后再安装 `libxcb-sys-dev`。 5. **检查网络连接**: 确保你的机器能够访问到软件仓库,如果网络有问题,也可能会导致包找不到。 修改后的脚本示例: ```bash $ vi ./install_openvino_dependencies.sh # 更改部分 E: Unable to locate package gudev-1.0, libgudev-1.0-dev E: Unable to locate package libusb-1.0.0-dev, libusb-1.0-0-dev E: Package 'libfluidsynth1' has no installation candidate, libfluidsynth2 E: Unable to locate package libnettle6, libnettle7 E: Unable to locate package libopenexr22, libopenexr24 E: Unable to locate package libxcb-sys-dev, libxcb-util0-dev ``` 执行完以上步骤后,尝试重新运行安装脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值