You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用qcc QNX编译器编译OpenCV?编译报错求助

问题

我在Ubuntu 20.04.6系统上尝试用qcc QNX编译器编译OpenCV。按照OpenCV源码构建指南,原本的CMake构建命令是:

cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_EXAMPLES=ON ..

我添加了指定qcc编译器的参数,修改后的命令为:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=qcc -DCMAKE_CXX_COMPILER=qcc \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_EXAMPLES=ON ..

但执行make(或Ninja)构建时出现大量错误和警告,最终失败,错误示例如下:

[ 13%] Building CXX object modules/ml/CMakeFiles/opencv_ml.dir/src/gbt.cpp.o
/usr/bin/ld: /home/user/qnx710/target/qnx7/x86_64/lib/libc.so: warning: the use of `pthread_attr_setstackaddr' is deprecated, use `pthread_attr_setstack'
/usr/bin/ld: /home/user/qnx710/target/qnx7/x86_64/lib/libc.so: warning: the use of `pthread_attr_getstackaddr' is deprecated, use `pthread_attr_getstack'
[ 13%] Building CXX object modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/accum.dispatch.cpp.o
/usr/bin/ld: /home/user/qnx710/target/qnx7/x86_64/lib/libc.so: warning: The 'mktemp' function is dangerous. Use 'mkstemp' instead.
/usr/bin/ld: CMakeFiles/opencv_version.dir/opencv_version.cpp.o: undefined reference to symbol '__printf_chk@@GLIBC_2.3.4'
/usr/bin/ld: /lib/x86_64-linux-gnu/libc.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
apps/version/CMakeFiles/opencv_version.dir/build.make:103: recipe for target 'bin/opencv_version' failed
make[2]: *** [bin/opencv_version] Error 1
CMakeFiles/Makefile2:19706: recipe for target 'apps/version/CMakeFiles/opencv_version.dir/all' failed
make[1]: *** [apps/version/CMakeFiles/opencv_version.dir/all] Error 2
[ 15%] Built target opencv_imgproc
Makefile:165: recipe for target 'all' failed
make: *** [all] Error 2

想知道如何正确用qcc QNX编译器编译该项目,或者有哪些更兼容qcc的开源项目?

解决方案

一、正确配置qcc编译OpenCV的关键步骤

从错误来看,核心问题是链接阶段混用了QNX的libc和Ubuntu系统的GLIBC,且qcc的CMake交叉编译配置不完整。以下是修正步骤:

  1. 创建QNX专属工具链文件
    CMake需要明确交叉编译环境,不能仅指定编译器。新建qnx-toolchain.cmake文件,内容如下:
set(CMAKE_SYSTEM_NAME QNX)
set(CMAKE_SYSTEM_VERSION 7.1.0)
set(CMAKE_SYSTEM_PROCESSOR x86_64)

# 指定QNX SDK路径
set(QNX_SDK_PATH "/home/user/qnx710")
set(CMAKE_C_COMPILER "${QNX_SDK_PATH}/host/linux/x86_64/usr/bin/qcc")
set(CMAKE_CXX_COMPILER "${QNX_SDK_PATH}/host/linux/x86_64/usr/bin/qcc")
set(CMAKE_LINKER "${QNX_SDK_PATH}/host/linux/x86_64/usr/bin/ld")

# 指定目标系统根目录
set(CMAKE_FIND_ROOT_PATH "${QNX_SDK_PATH}/target/qnx7/${CMAKE_SYSTEM_PROCESSOR}")

# 限制查找范围到QNX目标环境
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# 添加qcc目标平台编译选项
add_compile_options(-Vgcc_ntox86_64)
add_link_options(-Vgcc_ntox86_64)

然后在CMake命令中指定该工具链文件:

cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=./qnx-toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/qnx-opencv \
-DINSTALL_C_EXAMPLES=OFF \
-DINSTALL_PYTHON_EXAMPLES=OFF \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_EXTRA_MODULES_PATH=~/opencv_build/opencv_contrib/modules \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_EXAMPLES=OFF ..

注意:先关闭examples编译,QNX环境下的Python、GUI等依赖大概率缺失,优先保证核心库编译通过。

  1. 修复GLIBC符号缺失问题
    错误中的__printf_chk是GLIBC特有符号,QNX libc不支持。在CMake中添加编译定义,强制使用标准printf:
# 在CMake命令中追加
-DCMAKE_CXX_FLAGS="-D__printf_chk=printf" \
-DCMAKE_C_FLAGS="-D__printf_chk=printf"

也可以直接把这行加到工具链文件里:

add_definitions(-D__printf_chk=printf)
  1. 清理旧构建目录
    之前的构建目录已经混入Ubuntu系统配置,必须完全删除后重新执行CMake:
rm -rf build && mkdir build && cd build

二、兼容qcc的开源项目推荐

如果OpenCV的适配成本太高,以下项目对QNX/qcc的兼容性更好:

  • libjpeg-turbo:轻量级JPEG编解码库,交叉编译流程简单,原生支持QNX
  • SDL2:多媒体开发库,官方提供QNX编译文档,适合开发图形/多媒体应用
  • Boost:大部分模块(容器、算法、线程等)可通过qcc编译,只需配置工具链
  • OpenSSL:官方支持QNX平台,可编译出适配QNX的加密库

内容的提问来源于stack exchange,提问作者Gal Hadar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:10:01