libxo icon indicating copy to clipboard operation
libxo copied to clipboard

Fails to build with GCC on FreeBSD

Open jbeich opened this issue 4 years ago • 2 comments

Affects at least FreeBSD 11.3-RELEASE, 12.1-RELEASE, 13.0-RELEASE.

$ pkg install automake libtool gmake gcc9
$ sh bin/setup.sh
$ cd build
$ export MAKE=gmake CC=gcc9
$ ../configure --enable-warnings
$ gmake
[...]
../../libxo/xo_encoder.c: In function 'xo_encoder_discover':
../../libxo/xo_encoder.c:237:9: error: cast between incompatible function types from 'dlfunc_t' {aka 'void (*)(struct __dlfunc_arg)'} to 'int (*)(xo_encoder_init_args_t *)' {aka 'int (*)(struct xo_encoder_init_args_s *)'} [-Werror=cast-function-type]
  237 |  func = (xo_encoder_init_func_t) dlfunc(dlp, XO_ENCODER_INIT_NAME);
      |         ^

jbeich avatar May 21 '20 19:05 jbeich

Very strange, considering that dlfunc is meant to be cast:

 The dlfunc() function implements all of the behavior of dlsym(), but has
 a return type which can be cast to a function pointer without triggering
 compiler diagnostics.  (The dlsym() function returns a data pointer; in
 the C standard, conversions between data and function pointer types are
 undefined.  Some compilers and lint(1) utilities warn about such casts.)
 The precise return type of dlfunc() is unspecified; applications must
 cast it to an appropriate function pointer type.

I guess the fix would involve "#pragma GCC diagnostic push/ignore/pop".

Thanks, Phil

philshafer avatar Jun 02 '20 19:06 philshafer

Sorry to be so insanely slow; Fixed in "develop".

Thanks, Phil

philshafer avatar May 27 '21 03:05 philshafer