Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fails to build with GCC 10 / Clang 11 (-fno-common) #206

Closed
jbeich opened this issue Aug 23, 2020 · 3 comments
Closed

Fails to build with GCC 10 / Clang 11 (-fno-common) #206

jbeich opened this issue Aug 23, 2020 · 3 comments
Assignees

Comments

@jbeich
Copy link
Contributor

jbeich commented Aug 23, 2020

Description

GCC 10 and Clang 11 enable -fno-common by default.

https://gcc.gnu.org/gcc-10/porting_to.html#common

GCC 10 error
/usr/bin/ld.bfd: openborscript.o:(.bss+0x78): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: openborscript.o:(.bss+0x80): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: sdl/control.o:(.bss+0x60): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: sdl/control.o:(.bss+0x68): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: sdl/menu.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: sdl/menu.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/gamelib/translation.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/gamelib/translation.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/gamelib/models.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/gamelib/models.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/utils.o:(.bss+0x830): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/utils.o:(.bss+0x838): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/animation.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/animation.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/axis.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/axis.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/binding.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/binding.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/drawmethod.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/drawmethod.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/collision_attack.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/collision_attack.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/collision_body.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/collision_body.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/collision_entity.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/collision_entity.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/constants.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/constants.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/entity.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/entity.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/index.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/index.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/layer.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/layer.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/level.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/level.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/math.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/math.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/recursive_damage.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/recursive_damage.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
/usr/bin/ld.bfd: source/openborscript/string.o:(.bss+0x0): multiple definition of `model_cache'; openbor.o:(.bss+0x39b8): first defined here
/usr/bin/ld.bfd: source/openborscript/string.o:(.bss+0x8): multiple definition of `anim_list'; openbor.o:(.bss+0x39c0): first defined here
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:672: OpenBOR.elf] Error 1
Clang 11 error
ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at openborscript.c
>>>            openborscript.o:(.bss+0xD80)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at openborscript.c
>>>            openborscript.o:(.bss+0x4B0)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at control.c
>>>            sdl/control.o:(.bss+0x68)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at control.c
>>>            sdl/control.o:(.bss+0x70)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at menu.c
>>>            sdl/menu.o:(.bss+0x30)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at menu.c
>>>            sdl/menu.o:(.bss+0x38)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at translation.c
>>>            source/gamelib/translation.o:(.bss+0x18)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at translation.c
>>>            source/gamelib/translation.o:(.bss+0x20)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at models.c
>>>            source/gamelib/models.o:(.bss+0x408)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at models.c
>>>            source/gamelib/models.o:(.bss+0x410)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at utils.c
>>>            source/utils.o:(.bss+0x850)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at utils.c
>>>            source/utils.o:(.bss+0x858)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at animation.c
>>>            source/openborscript/animation.o:(.bss+0x0)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at animation.c
>>>            source/openborscript/animation.o:(.bss+0x8)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at axis.c
>>>            source/openborscript/axis.o:(.bss+0x0)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at axis.c
>>>            source/openborscript/axis.o:(.bss+0x8)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at binding.c
>>>            source/openborscript/binding.o:(.bss+0x0)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at binding.c
>>>            source/openborscript/binding.o:(.bss+0x8)

ld.lld: error: duplicate symbol: anim_list
>>> defined at openbor.c
>>>            openbor.o:(anim_list)
>>> defined at drawmethod.c
>>>            source/openborscript/drawmethod.o:(.bss+0x0)

ld.lld: error: duplicate symbol: model_cache
>>> defined at openbor.c
>>>            openbor.o:(model_cache)
>>> defined at drawmethod.c
>>>            source/openborscript/drawmethod.o:(.bss+0x8)

ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
cc: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [Makefile:672: OpenBOR.elf] Error 1

Reproduce

  1. Install GCC 10 or Clang 11
  2. Set CC/CXX/CPP via environ(7)
  3. Run build.sh or make BUILD_LINUX=1

Expected behavior

Builds fine

Version

  • FreeBSD 13.0-CURRENT amd64 (Clang 11 is /usr/bin/cc aka the system compiler)
  • OpenBOR v3.0 Build 7087 (e761464, downstream package)
@DCurrent
Copy link
Owner

DCurrent commented Aug 23, 2020

Thanks, I'll look into this. Really couldn't care less about Clang, but definitely should compile on latest GCC.

Edit: Similar ticket open on GCC9, but the proposed solution (turning off an error flag) is not acceptable. The error log you provided will hopefully give some better insight. @Plombo might also have some observations as his low level knowledge far exceeds mine.

@jbeich
Copy link
Contributor Author

jbeich commented Aug 24, 2020

Really couldn't care less about Clang

Looking at build.sh both darwin and android maybe affected in future:

  • macOS: Clang is default since Xcode 4.2, GCC is dropped since Xcode 5.0 (gcc is symlink to Clang)
  • Android: Clang is default since NDK r13b (October 2016), GCC is dropped since NDK r17c (June 2018)

@DCurrent
Copy link
Owner

DCurrent commented Dec 3, 2020

Closing ticket to consolidate conversation with latest GCC compiling.

@DCurrent DCurrent closed this as completed Dec 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants