diff --git a/src/libcamera/pipeline/virtual/meson.build b/src/libcamera/pipeline/virtual/meson.build
index c84345936..19fde9cf8 100644
--- a/src/libcamera/pipeline/virtual/meson.build
+++ b/src/libcamera/pipeline/virtual/meson.build
@@ -7,9 +7,6 @@ libcamera_internal_sources += files([
     'virtual.cpp',
 ])
 
-libjpeg = dependency('libjpeg', required : true)
-
 libcamera_deps += [libyuv_dep]
-libcamera_deps += [libjpeg]
 
 subdir('data')
diff --git a/src/meson.build b/src/meson.build
index 9b63c8e84..8e23d40c3 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -46,6 +46,8 @@ if (pipelines.contains('virtual') or get_option('android').allowed()) and \
    not libyuv_dep.found()
     cmake = import('cmake')
 
+    libjpeg = dependency('libjpeg', required : true)
+
     libyuv_vars = cmake.subproject_options()
     libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
     libyuv_vars.set_override_option('cpp_std', 'c++17')
@@ -64,7 +66,7 @@ if (pipelines.contains('virtual') or get_option('android').allowed()) and \
     # Work around the issue by wrapping the libyuv static library into another
     # static library with 'pic' set to true.
     libyuv_static = static_library('libyuv-static',
-                                   dependencies : libyuv.dependency('yuv'),
+                                   dependencies : [libyuv.dependency('yuv'), libjpeg],
                                    pic : true,
                                    install : false)
     libyuv_include = libyuv.include_directories('yuv')
