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

Ubuntu22.04下VCPKG安装OpenCV失败:ninja子命令出错

问题:Ubuntu 22.04下VCPKG构建OpenCV依赖GTK3失败

环境:Ubuntu 22.04,CMake和VCPKG均为2024年1月安装的最新版本,项目在Windows下运行正常,但Ubuntu构建时出错。

项目配置文件

CMakeLists.txt

cmake_minimum_required (VERSION 3.20)
if (DEFINED ENV{VCPKG_ROOT})
    File(TO_CMAKE_PATH $ENV{VCPKG_ROOT} VCPKG_ROOT)
    message(STATUS ${VCPKG_ROOT})
    if(WIN32)
        set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "")
        set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "")
    else(WIN32)
        set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "" FORCE)
        set(VCPKG_TARGET_TRIPLET "x64-linux" CACHE STRING "")
    endif(WIN32)
    set(VCPKG_AVALIABLE TRUE)
else (DEFINED ENV{VCPKG_ROOT})
    message(WARNING "VCPKG_ROOT is not defined, OpenCV will not be used.")
    set(VCPKG_AVALIABLE FALSE)
endif()
project (test)
if (MSVC)
    add_definitions (-D_USE_MATH_DEFINES)
    add_definitions(/MP)
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ot /openmp" )
    set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<$<CONFIG:Debug>:Debug>>")
    
endif()

set(CXX_STANDARD 20)
enable_language(C)
enable_language(CXX)

if(VCPKG_AVALIABLE)
    set(OpenCV_STATIC, ON)
    FIND_PACKAGE(OpenCV REQUIRED)
    add_definitions (-D_USE_OPENCV)
endif(VCPKG_AVALIABLE)

add_executable(test main.cpp})
target_include_directories(test PUBLIC  ${OpenCV_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(test ${OpenCV_LIBS})

vcpkg.json

{
    "dependencies": [
    {
        "name": "opencv"
    }
   ]
}

构建脚本

#!/bin/bash
cmake -B./build -S./
cd build
make

错误信息

初始构建错误

ninja: build stopped: subcommand failed.

VCPKG安装日志(vcpkg-manifest-install.log)

Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
  * flatbuffers:x64-linux@23.5.26#1
  * gtk3:x64-linux@3.24.38#1
    opencv[core,default-features]:x64-linux@4.8.0#1
  * opencv4[core,default-features,dnn,gtk,jpeg,png,quirc,tiff,webp]:x64-linux@4.8.0#15
  * protobuf:x64-linux@3.21.12#1
  * vcpkg-get-python-packages:x64-linux@2024-01-02
Additional packages (*) will be modified to complete this operation.
Restored 0 package(s) from /home/mans/.cache/vcpkg/archives in 25.4 us. Use --debug to see more details.
Installing 1/6 gtk3:x64-linux@3.24.38#1...
Building gtk3:x64-linux@3.24.38#1...
-- Using cached GNOME-gtk-3.24.38.tar.gz.
-- Cleaning sources at /home/mans/local/vcpkg/buildtrees/gtk3/src/3.24.38-f430748213.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source /home/mans/local/vcpkg/downloads/GNOME-gtk-3.24.38.tar.gz
-- Applying patch 0001-build.patch
-- Applying patch cairo-cpp-linkage.patch
-- Using source at /home/mans/local/vcpkg/buildtrees/gtk3/src/3.24.38-f430748213.clean
-- Getting CMake variables for x64-linux-dbg
-- Getting CMake variables for x64-linux-rel
-- Configuring x64-linux-dbg
-- Configuring x64-linux-dbg done
-- Configuring x64-linux-rel
-- Configuring x64-linux-rel done
-- Package x64-linux-dbg
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:112 (message):
    Command failed: /home/mans/local/vcpkg/downloads/tools/ninja/1.10.2-linux/ninja install -v
    Working Directory: /home/mans/local/vcpkg/buildtrees/gtk3/x64-linux-dbg
    Error code: 1
    See logs for more information:
      /home/mans/local/vcpkg/buildtrees/gtk3/package-x64-linux-dbg-out.log

Call Stack (most recent call first):
  scripts/cmake/vcpkg_install_meson.cmake:33 (vcpkg_execute_required_process)
  ports/gtk3/portfile.cmake:79 (vcpkg_install_meson)
  scripts/ports.cmake:170 (include)


error: building gtk3:x64-linux failed with: BUILD_FAILED
Elapsed time to handle gtk3:x64-linux: 11 s
Please ensure you're using the latest port files with `git pull` and `vcpkg update`.
Then check for known issues at:
  https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+gtk3
You can submit a new issue at:
  https://github.com/microsoft/vcpkg/issues/new?title=[gtk3]+Build+error+on+x64-linux&amp;body=Copy+issue+body+from+%2Fhome%2Fmans%2FMyData%2FBitBucket%2Ftest%2Fvcpkg%2Fbuild%2Fvcpkg_installed%2Fvcpkg%2Fissue_body.md

GTK3构建日志(package-x64-linux-dbg-out.log)

[1/906] /home/mans/MyData/BitBucket/test/vcpkg/build/vcpkg_installed/x64-linux/tools/glib/glib-compile-resources gdk/gdk.gresource.xml --sourcedir ../src/3.24.38-f430748213.clean/gdk/. --sourcedir ../src/3.24.38-f430748213.clean/gdk --c-name _gdk --internal --generate --target gdk/gdkresources.c --manual-register --dependency-file gdk/gdkresources.c.d

multipress.so.p/gtkimcontextmultipress.c.o -c ../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.c
../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.c: In function ‘on_timeout’:
../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.c:204:3: warning: ‘gdk_threads_enter’ is deprecated [-Wdeprecated-declarations]
  204 |   gdk_threads_enter ();
      |   ^~~~~~~~~~~~~~~~~
In file included from ../src/3.24.38-f430748213.clean/gdk/gdk.h:61,
                 from ../src/3.24.38-f430748213.clean/gtk/gtk.h:30,
                 from ../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.h:20,
                 from ../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.c:20:
../src/3.24.38-f430748213.clean/gdk/gdkthreads.h:46:10: note: declared here
   46 | void     gdk_threads_enter                    (void);
      |          ^~~~~~~~~~~~~~~~~
../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.c:214:3: warning: ‘gdk_threads_leave’ is deprecated [-Wdeprecated-declarations]
  214 |   gdk_threads_leave ();
      |   ^~~~~~~~~~~~~~~~~
In file included from ../src/3.24.38-f430748213.clean/gdk/gdk.h:61,
                 from ../src/3.24.38-f430748213.clean/gtk/gtk.h:30,
                 from ../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.h:20,
                 from ../src/3.24.38-f430748213.clean/modules/input/gtkimcontextmultipress.c:20:
../src/3.24.38-f430748213.clean/gdk/gdkthreads.h:48:10: note: declared here
   48 | void     gdk_threads_leave                    (void);
      |          ^~~~~~~~~~~~~~~~~

[312/906] /usr/bin/python3 /home/mans/MyData/BitBucket/test/vcpkg/build/vcpkg_installed/x64-

Werror=int-to-pointer-cast -Werror=pointer-to-int-cast -Werror=empty-body -Werror=write-strings -MD -MQ gdk/libgdk-3.a.p/gdkwindow.c.o -MF gdk/libgdk-3.a.p/gdkwindow.c.o.d -o gdk/libgdk-3.a.p/gdkwindow.c.o -c ../src/3.24.38-f430748213.clean/gdk/gdkwindow.c
ninja: build stopped: subcommand failed.

解决方案

方案1:跳过GTK3依赖(推荐,若不需要OpenCV GUI功能)

OpenCV默认依赖GTK3,但如果你的项目不需要图像显示等GUI功能,可以修改vcpkg.json,指定只安装OpenCV的核心及必要特征,避免拉取GTK3:

{
    "dependencies": [
        {
            "name": "opencv",
            "features": ["core", "jpeg", "png"]
        }
    ]
}

修改后删除原build目录,重新运行构建脚本即可。

方案2:修复GTK3构建问题(若需要GUI功能)

  1. 更新VCPKG:执行以下命令确保port文件和工具链是最新的:
vcpkg update
vcpkg upgrade
  1. 安装系统依赖库:Ubuntu下构建GTK3需要额外的系统开发包,执行:
sudo apt-get update
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxinerama-dev libxcursor-dev libxi-dev libxrandr-dev libgtk-3-dev
  1. 清理缓存后重建:删除项目的build目录和VCPKG的缓存,重新运行构建脚本:
rm -rf build
rm -rf ~/.cache/vcpkg/archives
./你的构建脚本.sh

方案3:修正CMakeLists.txt的小错误

CMakeLists.txt中set(OpenCV_STATIC, ON)多了一个逗号,这会导致变量设置错误,修正为:

set(OpenCV_STATIC ON)

虽然这不是当前构建失败的直接原因,但修正后能避免后续潜在问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:14:56