qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Meson build on macOS: undefined symbol treatment


From: Thomas Huth
Subject: Re: Meson build on macOS: undefined symbol treatment
Date: Thu, 27 Aug 2020 10:16:33 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0

On 26/08/2020 15.11, Emmanuel Blot wrote:
> Hi,
> 
> I’ve noticed that since meson builds have been enabled, on macOS, the
> build outcome with undefined symbols has changed:
> 
> - prior to meson introduction (v5.1.0):
>   * referencing an undeclared symbol in source code led to a warning at
> compile stage
>   * referencing an undeclared symbol at link stage led to a fatal build
> error (as usually expected)
> 
> - since meson introduction
>   * same behavior at compile stage
>   * however, the linker does silently generate an application - which
> fails at launch since the symbol is undefined.
> 
> Step to reproduce:
> 
>   from softmmu/main.c, replace for example call to qemu_init() with
> qemu_init2();
> 
> - v5.1.0:
>   softmmu/main.c:48:5: warning: implicit declaration of function
> 'qemu_init2' is invalid in C99 [-Wimplicit-function-declaration]
>     qemu_init2(argc, argv, envp);
>       LINK    riscv64-softmmu/qemu-system-riscv64
>   Undefined symbols for architecture x86_64:
>     "_qemu_init2", referenced from:
>         _qemu_main in main.o
>   ld: symbol(s) not found for architecture x86_64
>   clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
>   make[1]: *** [qemu-system-riscv64] Error 1
> 
> - current master:
>   softmmu/main.c:49:5: warning: implicit declaration of function
> 'qemu_init2' is invalid in C99 [-Wimplicit-function-declaration]
>     qemu_init2(argc, argv, envp);
>     ^
>   1 warning generated.
>   [3/3] Linking target qemu-system-riscv64
> 
>  > riscv64-softmmu/qemu-system-riscv64
>   dyld: lazy symbol binding failed: Symbol not found: _qemu_init2
>     Referenced from:
> /Users/eblot/Sources/Git/github.com/QEMU/upstream/build/riscv64-softmmu/qemu-system-riscv64
> 
>     Expected in: flat namespace
> 
>     'riscv64-softmmu/qemu-system-ris…' terminated by signal SIGABRT (Abort)
> 
> 
> This new behavior is likely to come from the linker flag:
> 
>    -Wl,-undefined,dynamic_lookup
> 
> I’m not sure whether it is a new feature or a bug, but if the former
> stands true, is there a way to disable this feature?

Seems like this is added by meson itself (see
meson/mesonbuild/linkers.py), not by our meson.build files ... Paolo,
any idea why this happens?

 Thomas





reply via email to

[Prev in Thread] Current Thread [Next in Thread]