Compilation fails due to zstd qcow2 compression

Bug #1916655 reported by Dantali0n
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Invalid
Undecided
Unassigned

Bug Description

Compilation of QEMU fails when using recent versions of zstd.

I use the following commands to compile QEMU:
$ mkdir build
$ cd build
$ ../configure --enable-debug --target-list=x86_64-softmmu
$ make -j $(nproc)

Here is a paste from the ../configure output:
https://paste.ubuntu.com/p/dHsWzGV7TH/

And one from the make output:
https://paste.ubuntu.com/p/89qKk4NrFz/

In short the error boils down to:
../block/qcow2-threads.c: In function ‘qcow2_zstd_compress’:
../block/qcow2-threads.c:225:16: error: implicit declaration of function ‘ZSTD_compressStream2’; did you mean ‘ZSTD_compressStream’? [-Werror=implicit-function-declaration]
  225 | zstd_ret = ZSTD_compressStream2(cctx, &output, &input, ZSTD_e_end);
      | ^~~~~~~~~~~~~~~~~~~~
      | ZSTD_compressStream
../block/qcow2-threads.c:225:16: error: nested extern declaration of ‘ZSTD_compressStream2’ [-Werror=nested-externs]
../block/qcow2-threads.c:225:60: error: ‘ZSTD_e_end’ undeclared (first use in this function)
  225 | zstd_ret = ZSTD_compressStream2(cctx, &output, &input, ZSTD_e_end);
      |

System info:
QEMU commit: 7ef8134565dccf9186d5eabd7dbb4ecae6dead87 (from Github)
Kernel: 5.10.15
zstd: 1.4.8

Revision history for this message
John Snow (jnsnow) wrote :

The upstream zstd library seems to still offer that function as of 1.4.9:

https://github.com/facebook/zstd/blob/dev/lib/zstd.h#L708

what exact version of the zstd package do you have installed (Is it an Ubuntu package, a Fedora one? etc)

Can you verify that the version of the header you have installed for zstd.h actually declares ZSTD_compressStream2() ?

Revision history for this message
Dantali0n (dantalion) wrote :

Seems I had an old version (1.3.5) of zstd floating around in /usr/local. Consider this issue resolved.

Changed in qemu:
status: New → Invalid
Revision history for this message
John Snow (jnsnow) wrote :

Meson theoretically checks for that:

meson.build: zstd = dependency('libzstd', version: '>=1.4.0',

I suppose meson found the dependency, but the compile flags got the wrong header. Is there something we need to fix in the build system?

Revision history for this message
Dantali0n (dantalion) wrote :

> Is there something we need to fix in the build system?

Maybe, I do not know how this dependency is validated. If the directories used to validate dependencies differs from the directories (or order) used at compile / link time than this can cause errors like these.

However, what could also happen I suppose that the order in which headers are included differs from the order in which libraries are included. This could still be caused by the build system but also by the user (LD_PRELOAD, ld-config etc).

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.