在linux下编译包含opencv静态链接库的工程时,可能会报 cannot find -lopenjp2 的错误

一般是OpenJPEG 静态库存在问题。

1. 安装依赖

(1) 确认 OpenJPEG 静态库是否存在

检查你的系统中是否有 OpenJPEG 的静态库文件(libopenjp2.a)。例如:

find /usr -name "libopenjp2.a"

如果没有找到该文件,说明你需要安装或重新编译 OpenJPEG。

在开始之前,请确保你的系统已经安装了必要的依赖项和工具链。

(2) 安装构建工具

确保你已经安装了 cmake, gcc, 和其他必要的开发工具:

sudo apt update
sudo apt install build-essential cmake git pkg-config

(3) 安装 OpenJPEG 的依赖项

OpenJPEG 依赖一些第三方库来支持图像格式处理。运行以下命令安装这些依赖项:

sudo apt install libpng-dev libtiff-dev liblcms2-dev zlib1g-dev

2. 下载 OpenJPEG 源码

如果还没有下载源码,可以通过以下命令获取:

git clone https://github.com/uclouvain/openjpeg.git
cd openjpeg

如果你想使用特定版本(如 2.1.0),可以切换到相应的标签:

git checkout v2.1.0

3. 配置 CMake 参数同时生成动态和静态库

为了同时生成动态和静态库,可以在不同的构建目录中分别配置和编译。

在运行 cmake 命令时,添加以下两个关键参数:

BUILD_SHARED_LIBS=ON  #启用动态链接库的构建。
BUILD_SHARED_LIBS=OFF  #启用静态链接库的构建。

(1) 创建两个独立的构建目录

为了避免冲突,分别为动态库和静态库创建两个独立的构建目录。

mkdir build_shared
mkdir build_static

(2) 配置动态链接库

进入 build_shared 目录并运行 CMake,启用动态库构建:

cd build_shared
cmake .. -DCMAKE_INSTALL_PREFIX=/home/openjpeg/build_shared -DBUILD_SHARED_LIBS=ON

(3) 配置静态链接库

进入 build_static 目录并运行 CMake,启用静态库构建:

cd build_static
cmake .. -DCMAKE_INSTALL_PREFIX=/home/openjpeg/build_static -DBUILD_SHARED_LIBS=OFF

4. 编译和安装

分别在两个构建目录中执行编译和安装命令。

(1) 编译和安装动态库

build_shared 目录中:

make -j$(nproc)
sudo make install

(2) 编译和安装静态库

build_static 目录中:

make -j$(nproc)
sudo make install

5. 验证安装

安装完成后,可以分别验证动态库和静态库是否正确生成。

(1) 动态库验证

检查动态库文件是否存在于安装路径下,例如:

ls /home/openjpeg/build_shared/lib

你应该会看到类似 libopenjp2.so 的动态库文件。 

(2) 静态库验证

检查静态库文件是否存在于安装路径下,例如:

ls /home/openjpeg/build_static/lib

你应该会看到 libopenjp2.a 静态库文件。 


6. 清理(可选)

如果不再需要编译过程中的临时文件,可以清理它们:

make clean

注意事项

  1. 文件大小:静态库通常比动态库大得多,因为它们包含完整的实现。
  2. 依赖管理:静态库不会自动处理依赖关系,因此需要手动链接所有相关的库。
  3. 编译时间:静态库的编译时间可能更长,因为它需要生成完整的实现。
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐