opencv build

Posted by shensunbo on August 7, 2025

build linux version

build_ti_linux.sh

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

source /opt/ospas120-2023.10/environment-setup-aarch64-oe-linux

rm -rf build_ti_linux
mkdir build_ti_linux
cd build_ti_linux

cmake  \ -DBUILD_TESTS=OFF \ -DBUILD_PERF_TESTS=OFF \ -DBUILD_opencv_highgui=OFF \ -DBUILD_opencv_video=OFF \ -DBUILD_opencv_videoio=OFF \ -DBUILD_opencv_dnn=OFF \ -DBUILD_opencv_ml=OFF \ -DBUILD_opencv_videostab=OFF \ -DBUILD_opencv_objdetect=OFF \ -DBUILD_opencv_superres=OFF \ -DCMAKE_INSTALL_PREFIX=./install ..
# make VERBOSE=1 -j10
cmake --build . -j 10

build qnx710 version

build_ti_qnx.sh (put in root path)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

source /home/qnx710/qnxsdp-env.sh

rm -rf build_ti_qnx710
mkdir build_ti_qnx710
cd build_ti_qnx710

cmake .. -DTARGET_CPU:STRING=qnx -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-qnx.cmake \
            -DCPPBUILD_TARGET_CPU_TYPE:STRING=qnx -DQNXNTO=true -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
            -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DWITH_CUDA=OFF -DWITH_VTK=OFF -DWITH_MATLAB=OFF -DBUILD_DOCS=OFF \
            -DBUILD_opencv_python3=OFF -DBUILD_opencv_python2=OFF -DWITH_IPP=OFF -DBUILD_SHARED_LIBS=ON \
            -DBUILD_opencv_apps=OFF  -DWITH_OPENCL=OFF   \
            -DBUILD_JAVA=OFF -DBUILD_FAT_JAVA_LIB=OFF -DWITH_PROTOBUF=OFF -DWITH_QUIRC=OFF \
            -DBUILD_opencv_highgui=OFF -DBUILD_opencv_video=OFF \
            -DBUILD_opencv_videoio=OFF  -DBUILD_opencv_dnn=OFF  -DBUILD_opencv_ml=OFF  -DBUILD_opencv_videostab=OFF \
            -DWITH_PNG=OFF -DWITH_JPEG=OFF\
            -DBUILD_opencv_objdetect=OFF  -DBUILD_opencv_superres=OFF  -DCMAKE_INSTALL_PREFIX=./install


# make VERBOSE=1 -j10
cmake --build . -j 16

aarch64-qnx.cmake (put in platforms/linux/aarch64-qnx.cmake)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
if("$ENV{QNX_HOST}" STREQUAL "")
    message(FATAL_ERROR "QNX_HOST environment variable not found. Please set the variable to your host's build tools")
endif()
if("$ENV{QNX_TARGET}" STREQUAL "")
    message(FATAL_ERROR "QNX_TARGET environment variable not found. Please set the variable to the qnx target location")
endif()

if(CMAKE_HOST_WIN32)
    set(HOST_EXECUTABLE_SUFFIX ".exe")
    #convert windows paths to cmake paths
    file(TO_CMAKE_PATH "$ENV{QNX_HOST}" QNX_HOST)
    file(TO_CMAKE_PATH "$ENV{QNX_TARGET}" QNX_TARGET)
else()
    set(QNX_HOST "$ENV{QNX_HOST}")
    set(QNX_TARGET "$ENV{QNX_TARGET}")
endif()

message(STATUS "using QNX_HOST ${QNX_HOST}")
message(STATUS "using QNX_TARGET ${QNX_TARGET}")

set(QNX TRUE)
set(CMAKE_SYSTEM_NAME QNX)
set(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc)
set(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc)
set(CMAKE_ASM_COMPILER ${QNX_HOST}/usr/bin/qcc)
set(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "archiver")
set(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "ranlib")

if ("${GCC_VER}" STREQUAL "")
    set(GCC_VERSION "" CACHE STRING "gcc_ver")
else()
    set(GCC_VERSION "${GCC_VER}," CACHE STRING "gcc_ver")
endif()

# qnx arch is only valid for arm (le)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  -D_QNX_SOURCE ${EXTRA_CMAKE_C_FLAGS}" CACHE STRING "c_flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}   -D_QNX_SOURCE ${EXTRA_CMAKE_CXX_FLAGS}" CACHE STRING "cxx_flags")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${EXTRA_CMAKE_LINKER_FLAGS}" CACHE STRING "exe_linker_flags")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${EXTRA_CMAKE_LINKER_FLAGS}" CACHE STRING "so_linker_flags")

#set(CMAKE_FIND_ROOT_PATH ${VSOMEIP_EXTERNAL_DEPS_INSTALL};${VSOMEIP_EXTERNAL_DEPS_INSTALL}/${CPUVARDIR};${QNX_TARGET};${QNX_TARGET}/${CPUVARDIR})
set(CMAKE_FIND_ROOT_PATH ${QNX_TARGET}/${CMAKE_SYSTEM_PROCESSOR}le)

# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++")
# set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lstdc++")

set(CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries.")
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "aarch64-unknown-nto-qnx7.1.0" CACHE STRING "GNU compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")
set(arch nto${CMAKE_SYSTEM_PROCESSOR})
set(CMAKE_AS "$ENV{QNX_HOST}/usr/bin/${arch}-as")
set(CMAKE_AR "$ENV{QNX_HOST}/usr/bin/${arch}-ar")
set(CMAKE_C_COMPILER "$ENV{QNX_HOST}/usr/bin/${arch}-gcc")
set(CMAKE_CXX_COMPILER "$ENV{QNX_HOST}/usr/bin/${arch}-g++")
set(CMAKE_LINKER "$ENV{QNX_HOST}/usr/bin/${arch}-ld")

set(CMAKE_C_COMPILER_TARGET "gcc_ntoaarch64le")
set(CMAKE_CXX_COMPILER_TARGET "gcc_ntoaarch64le")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112L -D_QNX_SOURCE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112L -D_QNX_SOURCE")

message(STATUS "CMAKE_AS: ${CMAKE_AS}")
message(STATUS "CMAKE_AR: ${CMAKE_AR}")
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
message(STATUS "CMAKE_LINKER: ${CMAKE_LINKER}")


# SET(CMAKE_SYSROOT "/home/dean/qc/qnx710/target/qnx7")
# SET(CMAKE_C_FLAGS "--sysroot=${CMAKE_SYSROOT} -I/home/dean/qc/qnx710/target/qnx7/aarch64le ${CMAKE_C_FLAGS}"  CACHE INTERNAL "" FORCE)
# SET(CMAKE_C_LINK_FLAGS "--sysroot=${CMAKE_SYSROOT} ${CMAKE_C_LINK_FLAGS}"  CACHE INTERNAL "" FORCE)
# SET(CMAKE_CXX_FLAGS "--sysroot=${CMAKE_SYSROOT} -I/home/dean/qc/qnx710/target/qnx7/aarch64le ${CMAKE_CXX_FLAGS}"  CACHE INTERNAL "" FORCE)
# SET(CMAKE_CXX_LINK_FLAGS "--sysroot=${CMAKE_SYSROOT} ${CMAKE_CXX_LINK_FLAGS}"  CACHE INTERNAL "" FORCE)

platforms/linux/arm.toolchain.cmake

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
diff --git a/platforms/linux/arm.toolchain.cmake b/platforms/linux/arm.toolchain.cmake
index 184997fba5..60a5c4db58 100644
--- a/platforms/linux/arm.toolchain.cmake
+++ b/platforms/linux/arm.toolchain.cmake
@@ -45,7 +45,8 @@ else()
 endif()
 
 if(NOT DEFINED ARM_LINUX_SYSROOT AND DEFINED GNU_MACHINE)
-  set(ARM_LINUX_SYSROOT /usr/${GNU_MACHINE}${FLOAT_ABI_SUFFIX})
+#   set(ARM_LINUX_SYSROOT /usr/${GNU_MACHINE}${FLOAT_ABI_SUFFIX})
+  set(ARM_LINUX_SYSROOT /home/qnx710/target/qnx7/usr/include)
 endif()
 
 if(NOT DEFINED CMAKE_CXX_FLAGS)
@@ -63,9 +64,9 @@ if(NOT DEFINED CMAKE_CXX_FLAGS)
     set(CMAKE_EXE_LINKER_FLAGS    "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,nocopyreloc")
   endif()
   if(CMAKE_SYSTEM_PROCESSOR STREQUAL arm)
-    set(ARM_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
+    set(ARM_LINKER_FLAGS "-Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now,-lc")
   elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
-    set(ARM_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
+    set(ARM_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now,-lc")
   endif()
   set(CMAKE_SHARED_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}")
   set(CMAKE_MODULE_LINKER_FLAGS "${ARM_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}")

CMakeLists.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0693731a8b..ab17b5cdf7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -773,7 +773,8 @@ if(UNIX OR MINGW)
     elseif(EMSCRIPTEN)
       # no need to link to system libs with emscripten
     elseif(QNXNTO)
-      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m)
+      set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m c)
+      message(STATUS "QNXNTO env ------ ")
     elseif(MINGW)
       set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} pthread)
     else()

modules/core/src/system.cpp

1
2
3
4
5
6
7
8
9
10
11
12
diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp
index 9d5304ac5a..3566f743ec 100644
--- a/modules/core/src/system.cpp
+++ b/modules/core/src/system.cpp
@@ -45,6 +45,7 @@
 #include <atomic>
 #include <iostream>
 #include <ostream>
+#include <unistd.h>
 
 #include <opencv2/core/utils/configuration.private.hpp>
 #include <opencv2/core/utils/trace.private.hpp>

modules/core/src/parallel.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
diff --git a/modules/core/src/parallel.cpp b/modules/core/src/parallel.cpp
index d81577cfed..bdee38beb5 100644
--- a/modules/core/src/parallel.cpp
+++ b/modules/core/src/parallel.cpp
@@ -1009,7 +1009,8 @@ int getNumberOfCPUs_()
 
 #if !defined(_WIN32) && !defined(__APPLE__) && defined(_SC_NPROCESSORS_ONLN)
 
-    static unsigned cpu_count_sysconf = (unsigned)sysconf( _SC_NPROCESSORS_ONLN );
+    // static unsigned cpu_count_sysconf = (unsigned)sysconf( _SC_NPROCESSORS_ONLN );
+    static unsigned cpu_count_sysconf = 4;
     ncpus = minNonZero(ncpus, cpu_count_sysconf);
 
 #endif