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

LTO build failure on master branch with GCC 9.3.0 (warnings in Android/iOS plugin API and ICU codegen) #45179

Closed
RevolNoom opened this issue Jan 14, 2021 · 13 comments · Fixed by #45183
Assignees
Milestone

Comments

@RevolNoom
Copy link

RevolNoom commented Jan 14, 2021

Godot version: 4
OS: Ubuntu 20.04.1LTS
Device: Dell Inspiron 3580, 64 bits, Intel core i7-8565U 1.80GHz, graphic card AMD Hainan / Mesa Intel UHD Graphics 620 (WHL GT2)

Issue description:
Compiled using gcc 9.3.0, scons version 3.1.2.
Building Godot with command:
$scons platform=linuxbsd -j7
produces a normal executable while
$scons platform=linuxbsd -j7 use_lto=yes
causes these errors to appear at linking time:

./platform/android/plugin/godot_plugin_config.h:70: warning: type 'struct PluginConfig' violates the C++ One Definition Rule [-Wodr]
   70 | struct PluginConfig {
      | 
./platform/iphone/plugin/godot_plugin_config.h:71: note: a different type is defined in another translation unit
   71 | struct PluginConfig {
      | 
./platform/android/plugin/godot_plugin_config.h:74: note: the first difference of corresponding definitions is field 'last_updated'
   74 |  uint64_t last_updated = 0;
      | 
./platform/iphone/plugin/godot_plugin_config.h:74: note: a field with different name is defined in another translation unit
   74 |  bool supports_targets = false;
      | 
./core/templates/vector.h:218: warning: 'push_back' violates the C++ One Definition Rule [-Wodr]
  218 | bool Vector<T>::push_back(T p_elem) {
      | 
./core/templates/vector.h:218: note: type mismatch in parameter 1
  218 | bool Vector<T>::push_back(T p_elem) {
      | 
./platform/android/plugin/godot_plugin_config.h:70: note: type 'struct PluginConfig' itself violates the C++ One Definition Rule
   70 | struct PluginConfig {
      | 
./platform/iphone/plugin/godot_plugin_config.h:71: note: the incompatible type is defined here
   71 | struct PluginConfig {
      | 
./core/templates/vector.h:218: note: 'push_back' was previously declared here
  218 | bool Vector<T>::push_back(T p_elem) {
      | 
./core/templates/vector.h:218: note: code may be misoptimized unless '-fno-strict-aliasing' is used
thirdparty/icu4c/common/udata.cpp:646: warning: type of 'icudt68_dat' does not match original declaration [-Wlto-type-mismatch]
  646 | extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT;
      | 
./thirdparty/icu4c/icudata.gen.h:10:41: note: 'icudt68_dat' was previously declared here
   10 | extern "C" U_EXPORT const unsigned char U_ICUDATA_ENTRY_POINT[] = {
      |                                         ^
{standard input}: Assembler messages:
{standard input}:16031542: Warning: end of file not at end of a line; newline inserted
{standard input}:16032897: Error: no such instruction: `_znk9sortarrayin23viewportrotationcontrol6axis2dens0_13axis2dcompar'
g++: fatal error: Killed signal terminated program lto1
compilation terminated.
make: *** [/tmp/cc1fV7GU.mk:2: /tmp/godot.linuxbsd.tools.64.DCky7S.ltrans0.ltrans.o] Error 1
lto-wrapper: fatal error: make returned 2 exit status
compilation terminated.
/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
scons: *** [bin/godot.linuxbsd.tools.64] Error 1
scons: building terminated because of errors.

136991559_4904246892979523_1739789317381814575_o

Steps to reproduce:
Cloning the current godot master branch and run $scons platform=linuxbsd -j7 use_lto=yes

@akien-mga akien-mga changed the title SCons LTO builds failed. struct PluginConfig violates C++ One Definition Rule. LTO build failure on master branch with GCC 9.3.0 Jan 14, 2021
@akien-mga akien-mga added this to the 4.0 milestone Jan 14, 2021
@akien-mga
Copy link
Member

There seems to be two types of warnings. The actual error is the one after {standard input}: Assembler messages: though it differs in both logs, so it might just be a consequence of another issue. Maybe fixing the warnings would help indeed.

CC @m4gr3d @naithar for the Android/iOS plugin issue and @bruvzg for the ICU issue.

@akien-mga akien-mga changed the title LTO build failure on master branch with GCC 9.3.0 LTO build failure on master branch with GCC 9.3.0 (warnings in Android/iOS plugin API and ICU codegen) Jan 14, 2021
@bruvzg bruvzg self-assigned this Jan 14, 2021
@naithar
Copy link
Contributor

naithar commented Jan 14, 2021

I can't reproduce it with scons platform=osx -j7 use_lto=yes on my side, but I guess changing PluginConfig name for both platforms to AndroidPlugingConfig and IOSPluginConfig wouldn't hurt.

@akien-mga
Copy link
Member

akien-mga commented Jan 14, 2021

I tested locally on Linux with GCC 10.2 and binutils 2.35.1 and a LTO build works fine for me, but I also have lots of -Wodr warnings + the -Wlto-type-mismatch warning for ICU (which I suspect might be the one causing the linking failure for @RevolNoom, maybe it triggers a bug in GCC 9.3.0 or older binutils which is fixed in my versions).

Here's the full list of warnings. There are many problems with GDNative (@vnen) but I think #44989 will actually solve many (all?) of them.

./platform/android/plugin/godot_plugin_config.h:70: warning: type 'struct PluginConfig' violates the C++ One Definition Rule [-Wodr]
   70 | struct PluginConfig {
      | 
./platform/iphone/plugin/godot_plugin_config.h:71: note: a different type is defined in another translation unit
   71 | struct PluginConfig {
      | 
./platform/android/plugin/godot_plugin_config.h:74: note: the first difference of corresponding definitions is field 'last_updated'
   74 |  uint64_t last_updated = 0;
      | 
./platform/iphone/plugin/godot_plugin_config.h:74: note: a field with different name is defined in another translation unit
   74 |  bool supports_targets = false;
      | 
./core/templates/vector.h:218: warning: 'push_back' violates the C++ One Definition Rule [-Wodr]
  218 | bool Vector<T>::push_back(T p_elem) {
      | 
./core/templates/vector.h:218: note: type mismatch in parameter 1
  218 | bool Vector<T>::push_back(T p_elem) {
      | 
./platform/android/plugin/godot_plugin_config.h:70: note: type 'struct PluginConfig' itself violates the C++ One Definition Rule
   70 | struct PluginConfig {
      | 
./platform/iphone/plugin/godot_plugin_config.h:71: note: the incompatible type is defined here
   71 | struct PluginConfig {
      | 
./core/templates/vector.h:218: note: 'push_back' was previously declared here
  218 | bool Vector<T>::push_back(T p_elem) {
      | 
./core/templates/vector.h:218: note: code may be misoptimized unless '-fno-strict-aliasing' is used
thirdparty/icu4c/common/udata.cpp:646: warning: type of 'icudt68_dat' does not match original declaration [-Wlto-type-mismatch]
  646 | extern "C" const DataHeader U_DATA_API U_ICUDATA_ENTRY_POINT;
      | 
./thirdparty/icu4c/icudata.gen.h:10:41: note: 'icudt68_dat' was previously declared here
   10 | extern "C" U_EXPORT const unsigned char U_ICUDATA_ENTRY_POINT[] = {
      |                                         ^
modules/gdnative/include/gdnative/string.h:131: warning: 'godot_string_chr' violates the C++ One Definition Rule [-Wodr]
  131 | godot_string GDAPI godot_string_chr(godot_char_type p_character);
      | 
modules/gdnative/gdnative/string.cpp:261:20: note: 'godot_string_chr' was previously declared here
  261 | godot_string GDAPI godot_string_chr(godot_char_type p_character) {
      |                    ^
modules/gdnative/include/gdnative/string.h:110: warning: 'godot_string_operator_index' violates the C++ One Definition Rule [-Wodr]
  110 | const godot_char_type GDAPI *godot_string_operator_index(godot_string *p_self, const godot_int p_idx);
      | 
modules/gdnative/gdnative/string.cpp:170:30: note: type mismatch in parameter 1
  170 | const godot_char_type GDAPI *godot_string_operator_index(godot_string *p_self, const godot_int p_idx) {
      |                              ^
modules/gdnative/gdnative/string.cpp:170:30: note: 'godot_string_operator_index' was previously declared here
modules/gdnative/include/gdnative/string.h:111: warning: 'godot_string_operator_index_const' violates the C++ One Definition Rule [-Wodr]
  111 | godot_char_type GDAPI godot_string_operator_index_const(const godot_string *p_self, const godot_int p_idx);
      | 
modules/gdnative/gdnative/string.cpp:175:23: note: type mismatch in parameter 1
  175 | godot_char_type GDAPI godot_string_operator_index_const(const godot_string *p_self, const godot_int p_idx) {
      |                       ^
modules/gdnative/gdnative/string.cpp:175:23: note: 'godot_string_operator_index_const' was previously declared here
modules/gdnative/include/gdnative/string.h:224: warning: 'godot_string_ord_at' violates the C++ One Definition Rule [-Wodr]
  224 | godot_char_type GDAPI godot_string_ord_at(const godot_string *p_self, godot_int p_idx);
      | 
modules/gdnative/gdnative/string.cpp:873:23: note: type mismatch in parameter 1
  873 | godot_char_type GDAPI godot_string_ord_at(const godot_string *p_self, godot_int p_idx) {
      |                       ^
modules/gdnative/gdnative/string.cpp:873:23: note: 'godot_string_ord_at' was previously declared here
modules/gdnative/include/gdnative/string.h:126: warning: 'godot_string_naturalnocasecmp_to' violates the C++ One Definition Rule [-Wodr]
  126 | signed char GDAPI godot_string_naturalnocasecmp_to(const godot_string *p_self, const godot_string *p_str);
      | 
modules/gdnative/gdnative/string.cpp:234:19: note: type mismatch in parameter 1
  234 | signed char GDAPI godot_string_naturalnocasecmp_to(const godot_string *p_self, const godot_string *p_str) {
      |                   ^
modules/gdnative/gdnative/string.cpp:234:19: note: 'godot_string_naturalnocasecmp_to' was previously declared here
modules/gdnative/include/gdnative/string.h:124: warning: 'godot_string_casecmp_to' violates the C++ One Definition Rule [-Wodr]
  124 | signed char GDAPI godot_string_casecmp_to(const godot_string *p_self, const godot_string *p_str);
      | 
modules/gdnative/gdnative/string.cpp:220:19: note: type mismatch in parameter 1
  220 | signed char GDAPI godot_string_casecmp_to(const godot_string *p_self, const godot_string *p_str) {
      |                   ^
modules/gdnative/gdnative/string.cpp:220:19: note: 'godot_string_casecmp_to' was previously declared here
modules/gdnative/include/gdnative/string.h:125: warning: 'godot_string_nocasecmp_to' violates the C++ One Definition Rule [-Wodr]
  125 | signed char GDAPI godot_string_nocasecmp_to(const godot_string *p_self, const godot_string *p_str);
      | 
modules/gdnative/gdnative/string.cpp:227:19: note: type mismatch in parameter 1
  227 | signed char GDAPI godot_string_nocasecmp_to(const godot_string *p_self, const godot_string *p_str) {
      |                   ^
modules/gdnative/gdnative/string.cpp:227:19: note: 'godot_string_nocasecmp_to' was previously declared here
modules/gdnative/include/gdnative/string.h:199: warning: 'godot_string_split_with_maxsplit' violates the C++ One Definition Rule [-Wodr]
  199 | godot_packed_string_array GDAPI godot_string_split_with_maxsplit(const godot_string *p_self, const godot_string *p_splitter, const godot_bool p_allow_empty, const godot_int p_maxsplit);
      | 
modules/gdnative/gdnative/string.cpp:703:33: note: return value type mismatch
  703 | godot_packed_string_array GDAPI godot_string_split_with_maxsplit(const godot_string *p_self, const godot_string *p_splitter, const godot_bool p_allow_empty, const godot_int p_maxsplit) {
      |                                 ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/string.cpp:703:33: note: 'godot_string_split_with_maxsplit' was previously declared here
  703 | godot_packed_string_array GDAPI godot_string_split_with_maxsplit(const godot_string *p_self, const godot_string *p_splitter, const godot_bool p_allow_empty, const godot_int p_maxsplit) {
      |                                 ^
modules/gdnative/include/gdnative/string.h:203: warning: 'godot_string_rsplit_with_maxsplit' violates the C++ One Definition Rule [-Wodr]
  203 | godot_packed_string_array GDAPI godot_string_rsplit_with_maxsplit(const godot_string *p_self, const godot_string *p_splitter, const godot_bool p_allow_empty, const godot_int p_maxsplit);
      | 
modules/gdnative/gdnative/string.cpp:729:33: note: return value type mismatch
  729 | godot_packed_string_array GDAPI godot_string_rsplit_with_maxsplit(const godot_string *p_self, const godot_string *p_splitter, const godot_bool p_allow_empty, const godot_int p_maxsplit) {
      |                                 ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/string.cpp:729:33: note: 'godot_string_rsplit_with_maxsplit' was previously declared here
  729 | godot_packed_string_array GDAPI godot_string_rsplit_with_maxsplit(const godot_string *p_self, const godot_string *p_splitter, const godot_bool p_allow_empty, const godot_int p_maxsplit) {
      |                                 ^
modules/gdnative/include/gdnative/string.h:214: warning: 'godot_string_split_spaces' violates the C++ One Definition Rule [-Wodr]
  214 | godot_packed_string_array GDAPI godot_string_split_spaces(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:810:33: note: return value type mismatch
  810 | godot_packed_string_array GDAPI godot_string_split_spaces(const godot_string *p_self) {
      |                                 ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/string.cpp:810:33: note: 'godot_string_split_spaces' was previously declared here
  810 | godot_packed_string_array GDAPI godot_string_split_spaces(const godot_string *p_self) {
      |                                 ^
modules/gdnative/include/gdnative/string.h:206: warning: 'godot_string_split_floats_allow_empty' violates the C++ One Definition Rule [-Wodr]
  206 | godot_packed_float32_array GDAPI godot_string_split_floats_allow_empty(const godot_string *p_self, const godot_string *p_splitter);
      | 
modules/gdnative/gdnative/string.cpp:747:34: note: return value type mismatch
  747 | godot_packed_float32_array GDAPI godot_string_split_floats_allow_empty(const godot_string *p_self, const godot_string *p_splitter) {
      |                                  ^
modules/gdnative/include/gdnative/packed_arrays.h:81:3: note: type name 'godot_packed_float32_array' should match type name 'TestGDNativeString::godot_packed_float32_array'
   81 | } godot_packed_float32_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:81: note: the incompatible type is defined here
   81 | } godot_packed_float32_array;
      | 
modules/gdnative/gdnative/string.cpp:747:34: note: 'godot_string_split_floats_allow_empty' was previously declared here
  747 | godot_packed_float32_array GDAPI godot_string_split_floats_allow_empty(const godot_string *p_self, const godot_string *p_splitter) {
      |                                  ^
modules/gdnative/include/gdnative/string.h:208: warning: 'godot_string_split_floats_mk_allow_empty' violates the C++ One Definition Rule [-Wodr]
  208 | godot_packed_float32_array GDAPI godot_string_split_floats_mk_allow_empty(const godot_string *p_self, const godot_packed_string_array *p_splitters);
      | 
modules/gdnative/gdnative/string.cpp:765:34: note: return value type mismatch
  765 | godot_packed_float32_array GDAPI godot_string_split_floats_mk_allow_empty(const godot_string *p_self, const godot_packed_string_array *p_splitters) {
      |                                  ^
modules/gdnative/include/gdnative/packed_arrays.h:81:3: note: type name 'godot_packed_float32_array' should match type name 'TestGDNativeString::godot_packed_float32_array'
   81 | } godot_packed_float32_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:81: note: the incompatible type is defined here
   81 | } godot_packed_float32_array;
      | 
modules/gdnative/gdnative/string.cpp:765:34: note: 'godot_string_split_floats_mk_allow_empty' was previously declared here
  765 | godot_packed_float32_array GDAPI godot_string_split_floats_mk_allow_empty(const godot_string *p_self, const godot_packed_string_array *p_splitters) {
      |                                  ^
modules/gdnative/gdnative/string.cpp:765:34: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:304: warning: 'godot_packed_float32_array_size' violates the C++ One Definition Rule [-Wodr]
  304 | godot_int GDAPI godot_packed_float32_array_size(const godot_packed_float32_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:460:17: note: type mismatch in parameter 1
  460 | godot_int GDAPI godot_packed_float32_array_size(const godot_packed_float32_array *p_self) {
      |                 ^
modules/gdnative/gdnative/packed_arrays.cpp:460:17: note: type name 'godot_packed_float32_array' should match type name 'TestGDNativeString::godot_packed_float32_array'
modules/gdnative/gdnative/packed_arrays.cpp:460:17: note: 'godot_packed_float32_array_size' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:460:17: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:302: warning: 'godot_packed_float32_array_get' violates the C++ One Definition Rule [-Wodr]
  302 | float GDAPI godot_packed_float32_array_get(const godot_packed_float32_array *p_self, const godot_int p_idx);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:455:13: note: type mismatch in parameter 1
  455 | float GDAPI godot_packed_float32_array_get(const godot_packed_float32_array *p_self, const godot_int p_idx) {
      |             ^
modules/gdnative/gdnative/packed_arrays.cpp:455:13: note: type name 'godot_packed_float32_array' should match type name 'TestGDNativeString::godot_packed_float32_array'
modules/gdnative/gdnative/packed_arrays.cpp:455:13: note: 'godot_packed_float32_array_get' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:455:13: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:308: warning: 'godot_packed_float32_array_destroy' violates the C++ One Definition Rule [-Wodr]
  308 | void GDAPI godot_packed_float32_array_destroy(godot_packed_float32_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:470:12: note: type mismatch in parameter 1
  470 | void GDAPI godot_packed_float32_array_destroy(godot_packed_float32_array *p_self) {
      |            ^
modules/gdnative/include/gdnative/packed_arrays.h:81:3: note: type name 'godot_packed_float32_array' should match type name 'TestGDNativeString::godot_packed_float32_array'
   81 | } godot_packed_float32_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:81: note: the incompatible type is defined here
   81 | } godot_packed_float32_array;
      | 
modules/gdnative/gdnative/packed_arrays.cpp:470:12: note: 'godot_packed_float32_array_destroy' was previously declared here
  470 | void GDAPI godot_packed_float32_array_destroy(godot_packed_float32_array *p_self) {
      |            ^
modules/gdnative/gdnative/packed_arrays.cpp:470:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:210: warning: 'godot_string_split_ints_allow_empty' violates the C++ One Definition Rule [-Wodr]
  210 | godot_packed_int32_array GDAPI godot_string_split_ints_allow_empty(const godot_string *p_self, const godot_string *p_splitter);
      | 
modules/gdnative/gdnative/string.cpp:783:32: note: return value type mismatch
  783 | godot_packed_int32_array GDAPI godot_string_split_ints_allow_empty(const godot_string *p_self, const godot_string *p_splitter) {
      |                                ^
modules/gdnative/include/gdnative/packed_arrays.h:59:3: note: type name 'godot_packed_int32_array' should match type name 'TestGDNativeString::godot_packed_int32_array'
   59 | } godot_packed_int32_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:59: note: the incompatible type is defined here
   59 | } godot_packed_int32_array;
      | 
modules/gdnative/gdnative/string.cpp:783:32: note: 'godot_string_split_ints_allow_empty' was previously declared here
  783 | godot_packed_int32_array GDAPI godot_string_split_ints_allow_empty(const godot_string *p_self, const godot_string *p_splitter) {
      |                                ^
modules/gdnative/include/gdnative/string.h:212: warning: 'godot_string_split_ints_mk_allow_empty' violates the C++ One Definition Rule [-Wodr]
  212 | godot_packed_int32_array GDAPI godot_string_split_ints_mk_allow_empty(const godot_string *p_self, const godot_packed_string_array *p_splitters);
      | 
modules/gdnative/gdnative/string.cpp:801:32: note: return value type mismatch
  801 | godot_packed_int32_array GDAPI godot_string_split_ints_mk_allow_empty(const godot_string *p_self, const godot_packed_string_array *p_splitters) {
      |                                ^
modules/gdnative/include/gdnative/packed_arrays.h:59:3: note: type name 'godot_packed_int32_array' should match type name 'TestGDNativeString::godot_packed_int32_array'
   59 | } godot_packed_int32_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:59: note: the incompatible type is defined here
   59 | } godot_packed_int32_array;
      | 
modules/gdnative/gdnative/string.cpp:801:32: note: 'godot_string_split_ints_mk_allow_empty' was previously declared here
  801 | godot_packed_int32_array GDAPI godot_string_split_ints_mk_allow_empty(const godot_string *p_self, const godot_packed_string_array *p_splitters) {
      |                                ^
modules/gdnative/gdnative/string.cpp:801:32: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:232: warning: 'godot_packed_int32_array_size' violates the C++ One Definition Rule [-Wodr]
  232 | godot_int GDAPI godot_packed_int32_array_size(const godot_packed_int32_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:252:17: note: type mismatch in parameter 1
  252 | godot_int GDAPI godot_packed_int32_array_size(const godot_packed_int32_array *p_self) {
      |                 ^
modules/gdnative/gdnative/packed_arrays.cpp:252:17: note: type name 'godot_packed_int32_array' should match type name 'TestGDNativeString::godot_packed_int32_array'
modules/gdnative/gdnative/packed_arrays.cpp:252:17: note: 'godot_packed_int32_array_size' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:252:17: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:230: warning: 'godot_packed_int32_array_get' violates the C++ One Definition Rule [-Wodr]
  230 | int32_t GDAPI godot_packed_int32_array_get(const godot_packed_int32_array *p_self, const godot_int p_idx);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:247:15: note: type mismatch in parameter 1
  247 | int32_t GDAPI godot_packed_int32_array_get(const godot_packed_int32_array *p_self, const godot_int p_idx) {
      |               ^
modules/gdnative/gdnative/packed_arrays.cpp:247:15: note: type name 'godot_packed_int32_array' should match type name 'TestGDNativeString::godot_packed_int32_array'
modules/gdnative/gdnative/packed_arrays.cpp:247:15: note: 'godot_packed_int32_array_get' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:247:15: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:236: warning: 'godot_packed_int32_array_destroy' violates the C++ One Definition Rule [-Wodr]
  236 | void GDAPI godot_packed_int32_array_destroy(godot_packed_int32_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:262:12: note: type mismatch in parameter 1
  262 | void GDAPI godot_packed_int32_array_destroy(godot_packed_int32_array *p_self) {
      |            ^
modules/gdnative/include/gdnative/packed_arrays.h:59:3: note: type name 'godot_packed_int32_array' should match type name 'TestGDNativeString::godot_packed_int32_array'
   59 | } godot_packed_int32_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:59: note: the incompatible type is defined here
   59 | } godot_packed_int32_array;
      | 
modules/gdnative/gdnative/packed_arrays.cpp:262:12: note: 'godot_packed_int32_array_destroy' was previously declared here
  262 | void GDAPI godot_packed_int32_array_destroy(godot_packed_int32_array *p_self) {
      |            ^
modules/gdnative/gdnative/packed_arrays.cpp:262:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:174: warning: 'godot_string_similarity' violates the C++ One Definition Rule [-Wodr]
  174 | godot_real GDAPI godot_string_similarity(const godot_string *p_self, const godot_string *p_string);
      | 
modules/gdnative/gdnative/string.cpp:572:18: note: type mismatch in parameter 1
  572 | godot_real GDAPI godot_string_similarity(const godot_string *p_self, const godot_string *p_string) {
      |                  ^
modules/gdnative/gdnative/string.cpp:572:18: note: 'godot_string_similarity' was previously declared here
modules/gdnative/include/gdnative/string.h:130: warning: 'godot_string_bigrams' violates the C++ One Definition Rule [-Wodr]
  130 | godot_packed_string_array GDAPI godot_string_bigrams(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:254:33: note: return value type mismatch
  254 | godot_packed_string_array GDAPI godot_string_bigrams(const godot_string *p_self) {
      |                                 ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/string.cpp:254:33: note: 'godot_string_bigrams' was previously declared here
  254 | godot_packed_string_array GDAPI godot_string_bigrams(const godot_string *p_self) {
      |                                 ^
modules/gdnative/include/gdnative/packed_arrays.h:376: warning: 'godot_packed_string_array_size' violates the C++ One Definition Rule [-Wodr]
  376 | godot_int GDAPI godot_packed_string_array_size(const godot_packed_string_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:677:17: note: type mismatch in parameter 1
  677 | godot_int GDAPI godot_packed_string_array_size(const godot_packed_string_array *p_self) {
      |                 ^
modules/gdnative/gdnative/packed_arrays.cpp:677:17: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
modules/gdnative/gdnative/packed_arrays.cpp:677:17: note: 'godot_packed_string_array_size' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:677:17: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:374: warning: 'godot_packed_string_array_get' violates the C++ One Definition Rule [-Wodr]
  374 | godot_string GDAPI godot_packed_string_array_get(const godot_packed_string_array *p_self, const godot_int p_idx);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:668:20: note: type mismatch in parameter 1
  668 | godot_string GDAPI godot_packed_string_array_get(const godot_packed_string_array *p_self, const godot_int p_idx) {
      |                    ^
modules/gdnative/gdnative/packed_arrays.cpp:668:20: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
modules/gdnative/gdnative/packed_arrays.cpp:668:20: note: 'godot_packed_string_array_get' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:668:20: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:178: warning: 'godot_string_to_int' violates the C++ One Definition Rule [-Wodr]
  178 | godot_int GDAPI godot_string_to_int(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:598:17: note: type mismatch in parameter 1
  598 | godot_int GDAPI godot_string_to_int(const godot_string *p_self) {
      |                 ^
modules/gdnative/gdnative/string.cpp:598:17: note: 'godot_string_to_int' was previously declared here
modules/gdnative/include/gdnative/string.h:138: warning: 'godot_string_findmk' violates the C++ One Definition Rule [-Wodr]
  138 | godot_int GDAPI godot_string_findmk(const godot_string *p_self, const godot_packed_string_array *p_keys);
      | 
modules/gdnative/gdnative/string.cpp:309:17: note: type mismatch in parameter 1
  309 | godot_int GDAPI godot_string_findmk(const godot_string *p_self, const godot_packed_string_array *p_keys) {
      |                 ^
modules/gdnative/gdnative/string.cpp:309:17: note: 'godot_string_findmk' was previously declared here
modules/gdnative/gdnative/string.cpp:309:17: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:139: warning: 'godot_string_findmk_from' violates the C++ One Definition Rule [-Wodr]
  139 | godot_int GDAPI godot_string_findmk_from(const godot_string *p_self, const godot_packed_string_array *p_keys, godot_int p_from);
      | 
modules/gdnative/gdnative/string.cpp:315:17: note: type mismatch in parameter 1
  315 | godot_int GDAPI godot_string_findmk_from(const godot_string *p_self, const godot_packed_string_array *p_keys, godot_int p_from) {
      |                 ^
modules/gdnative/gdnative/string.cpp:315:17: note: 'godot_string_findmk_from' was previously declared here
modules/gdnative/gdnative/string.cpp:315:17: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:140: warning: 'godot_string_findmk_from_in_place' violates the C++ One Definition Rule [-Wodr]
  140 | godot_int GDAPI godot_string_findmk_from_in_place(const godot_string *p_self, const godot_packed_string_array *p_keys, godot_int p_from, godot_int *r_key);
      | 
modules/gdnative/gdnative/string.cpp:321:17: note: type mismatch in parameter 1
  321 | godot_int GDAPI godot_string_findmk_from_in_place(const godot_string *p_self, const godot_packed_string_array *p_keys, godot_int p_from, godot_int *r_key) {
      |                 ^
modules/gdnative/gdnative/string.cpp:321:17: note: 'godot_string_findmk_from_in_place' was previously declared here
modules/gdnative/gdnative/string.cpp:321:17: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:142: warning: 'godot_string_findn_from' violates the C++ One Definition Rule [-Wodr]
  142 | godot_int GDAPI godot_string_findn_from(const godot_string *p_self, const godot_string *p_what, godot_int p_from);
      | 
modules/gdnative/gdnative/string.cpp:339:17: note: type mismatch in parameter 1
  339 | godot_int GDAPI godot_string_findn_from(const godot_string *p_self, const godot_string *p_what, godot_int p_from) {
      |                 ^
modules/gdnative/gdnative/string.cpp:339:17: note: 'godot_string_findn_from' was previously declared here
modules/gdnative/include/gdnative/string.h:169: warning: 'godot_string_rfindn' violates the C++ One Definition Rule [-Wodr]
  169 | godot_int GDAPI godot_string_rfindn(const godot_string *p_self, const godot_string *p_what);
      | 
modules/gdnative/gdnative/string.cpp:524:17: note: type mismatch in parameter 1
  524 | godot_int GDAPI godot_string_rfindn(const godot_string *p_self, const godot_string *p_what) {
      |                 ^
modules/gdnative/gdnative/string.cpp:524:17: note: 'godot_string_rfindn' was previously declared here
modules/gdnative/include/gdnative/string.h:141: warning: 'godot_string_findn' violates the C++ One Definition Rule [-Wodr]
  141 | godot_int GDAPI godot_string_findn(const godot_string *p_self, const godot_string *p_what);
      | 
modules/gdnative/gdnative/string.cpp:332:17: note: type mismatch in parameter 1
  332 | godot_int GDAPI godot_string_findn(const godot_string *p_self, const godot_string *p_what) {
      |                 ^
modules/gdnative/gdnative/string.cpp:332:17: note: 'godot_string_findn' was previously declared here
modules/gdnative/include/gdnative/string.h:137: warning: 'godot_string_find_from' violates the C++ One Definition Rule [-Wodr]
  137 | godot_int GDAPI godot_string_find_from(const godot_string *p_self, const godot_string *p_what, godot_int p_from);
      | 
modules/gdnative/gdnative/string.cpp:302:17: note: type mismatch in parameter 1
  302 | godot_int GDAPI godot_string_find_from(const godot_string *p_self, const godot_string *p_what, godot_int p_from) {
      |                 ^
modules/gdnative/gdnative/string.cpp:302:17: note: 'godot_string_find_from' was previously declared here
modules/gdnative/include/gdnative/string.h:168: warning: 'godot_string_rfind' violates the C++ One Definition Rule [-Wodr]
  168 | godot_int GDAPI godot_string_rfind(const godot_string *p_self, const godot_string *p_what);
      | 
modules/gdnative/gdnative/string.cpp:517:17: note: type mismatch in parameter 1
  517 | godot_int GDAPI godot_string_rfind(const godot_string *p_self, const godot_string *p_what) {
      |                 ^
modules/gdnative/gdnative/string.cpp:517:17: note: 'godot_string_rfind' was previously declared here
modules/gdnative/include/gdnative/string.h:221: warning: 'godot_string_get_basename' violates the C++ One Definition Rule [-Wodr]
  221 | godot_string GDAPI godot_string_get_basename(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:849:20: note: type mismatch in parameter 1
  849 | godot_string GDAPI godot_string_get_basename(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:849:20: note: 'godot_string_get_basename' was previously declared here
modules/gdnative/include/gdnative/string.h:222: warning: 'godot_string_get_extension' violates the C++ One Definition Rule [-Wodr]
  222 | godot_string GDAPI godot_string_get_extension(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:857:20: note: type mismatch in parameter 1
  857 | godot_string GDAPI godot_string_get_extension(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:857:20: note: 'godot_string_get_extension' was previously declared here
modules/gdnative/include/gdnative/string.h:263: warning: 'godot_string_get_file' violates the C++ One Definition Rule [-Wodr]
  263 | godot_string GDAPI godot_string_get_file(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1106: note: type mismatch in parameter 1
 1106 | godot_string GDAPI godot_string_get_file(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1106: note: 'godot_string_get_file' was previously declared here
modules/gdnative/include/gdnative/string.h:270: warning: 'godot_string_simplify_path' violates the C++ One Definition Rule [-Wodr]
  270 | godot_string GDAPI godot_string_simplify_path(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1161: note: type mismatch in parameter 1
 1161 | godot_string GDAPI godot_string_simplify_path(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1161: note: 'godot_string_simplify_path' was previously declared here
modules/gdnative/include/gdnative/string.h:262: warning: 'godot_string_get_base_dir' violates the C++ One Definition Rule [-Wodr]
  262 | godot_string GDAPI godot_string_get_base_dir(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1097: note: type mismatch in parameter 1
 1097 | godot_string GDAPI godot_string_get_base_dir(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1097: note: 'godot_string_get_base_dir' was previously declared here
modules/gdnative/include/gdnative/string.h:225: warning: 'godot_string_plus_file' violates the C++ One Definition Rule [-Wodr]
  225 | godot_string GDAPI godot_string_plus_file(const godot_string *p_self, const godot_string *p_file);
      | 
modules/gdnative/gdnative/string.cpp:879:20: note: type mismatch in parameter 1
  879 | godot_string GDAPI godot_string_plus_file(const godot_string *p_self, const godot_string *p_file) {
      |                    ^
modules/gdnative/gdnative/string.cpp:879:20: note: 'godot_string_plus_file' was previously declared here
modules/gdnative/include/gdnative/string.h:265: warning: 'godot_string_is_abs_path' violates the C++ One Definition Rule [-Wodr]
  265 | godot_bool GDAPI godot_string_is_abs_path(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1123: note: type mismatch in parameter 1
 1123 | godot_bool GDAPI godot_string_is_abs_path(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1123: note: 'godot_string_is_abs_path' was previously declared here
modules/gdnative/include/gdnative/string.h:266: warning: 'godot_string_is_rel_path' violates the C++ One Definition Rule [-Wodr]
  266 | godot_bool GDAPI godot_string_is_rel_path(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1129: note: type mismatch in parameter 1
 1129 | godot_bool GDAPI godot_string_is_rel_path(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1129: note: 'godot_string_is_rel_path' was previously declared here
modules/gdnative/include/gdnative/string.h:286: warning: 'godot_string_is_valid_filename' violates the C++ One Definition Rule [-Wodr]
  286 | godot_bool GDAPI godot_string_is_valid_filename(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1279: note: type mismatch in parameter 1
 1279 | godot_bool GDAPI godot_string_is_valid_filename(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1279: note: 'godot_string_is_valid_filename' was previously declared here
modules/gdnative/include/gdnative/string.h:291: warning: 'godot_string_is_valid_integer' violates the C++ One Definition Rule [-Wodr]
  291 | godot_bool GDAPI godot_string_is_valid_integer(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1309: note: type mismatch in parameter 1
 1309 | godot_bool GDAPI godot_string_is_valid_integer(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1309: note: 'godot_string_is_valid_integer' was previously declared here
modules/gdnative/include/gdnative/string.h:288: warning: 'godot_string_is_valid_hex_number' violates the C++ One Definition Rule [-Wodr]
  288 | godot_bool GDAPI godot_string_is_valid_hex_number(const godot_string *p_self, godot_bool p_with_prefix);
      | 
modules/gdnative/gdnative/string.cpp:1291: note: type mismatch in parameter 1
 1291 | godot_bool GDAPI godot_string_is_valid_hex_number(const godot_string *p_self, godot_bool p_with_prefix) {
      | 
modules/gdnative/gdnative/string.cpp:1291: note: 'godot_string_is_valid_hex_number' was previously declared here
modules/gdnative/include/gdnative/string.h:287: warning: 'godot_string_is_valid_float' violates the C++ One Definition Rule [-Wodr]
  287 | godot_bool GDAPI godot_string_is_valid_float(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1285: note: type mismatch in parameter 1
 1285 | godot_bool GDAPI godot_string_is_valid_float(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1285: note: 'godot_string_is_valid_float' was previously declared here
modules/gdnative/include/gdnative/string.h:290: warning: 'godot_string_is_valid_identifier' violates the C++ One Definition Rule [-Wodr]
  290 | godot_bool GDAPI godot_string_is_valid_identifier(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1303: note: type mismatch in parameter 1
 1303 | godot_bool GDAPI godot_string_is_valid_identifier(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1303: note: 'godot_string_is_valid_identifier' was previously declared here
modules/gdnative/include/gdnative/string.h:149: warning: 'godot_string_is_numeric' violates the C++ One Definition Rule [-Wodr]
  149 | godot_bool GDAPI godot_string_is_numeric(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:381:18: note: type mismatch in parameter 1
  381 | godot_bool GDAPI godot_string_is_numeric(const godot_string *p_self) {
      |                  ^
modules/gdnative/gdnative/string.cpp:381:18: note: 'godot_string_is_numeric' was previously declared here
modules/gdnative/include/gdnative/array.h:86: warning: 'godot_array_clear' violates the C++ One Definition Rule [-Wodr]
   86 | void GDAPI godot_array_clear(godot_array *p_self);
      | 
modules/gdnative/gdnative/array.cpp:207:12: note: type mismatch in parameter 1
  207 | void GDAPI godot_array_clear(godot_array *p_self) {
      |            ^
modules/gdnative/gdnative/array.cpp:207:12: note: 'godot_array_clear' was previously declared here
modules/gdnative/include/gdnative/array.h:63: warning: 'godot_array_new' violates the C++ One Definition Rule [-Wodr]
   63 | void GDAPI godot_array_new(godot_array *r_dest);
      | 
modules/gdnative/gdnative/array.cpp:46:12: note: type mismatch in parameter 1
   46 | void GDAPI godot_array_new(godot_array *r_dest) {
      |            ^
modules/gdnative/gdnative/array.cpp:46:12: note: 'godot_array_new' was previously declared here
modules/gdnative/include/gdnative/variant.h:211: warning: 'godot_variant_new_array' violates the C++ One Definition Rule [-Wodr]
  211 | void GDAPI godot_variant_new_array(godot_variant *r_dest, const godot_array *p_arr);
      | 
modules/gdnative/gdnative/variant.cpp:236: note: type mismatch in parameter 1
  236 | void GDAPI godot_variant_new_array(godot_variant *r_dest, const godot_array *p_arr) {
      | 
modules/gdnative/include/gdnative/variant.h:46:3: note: type name 'godot_variant' should match type name 'TestGDNativeString::godot_variant'
   46 | } godot_variant;
      |   ^
modules/gdnative/include/gdnative/variant.h:46: note: the incompatible type is defined here
   46 | } godot_variant;
      | 
modules/gdnative/gdnative/variant.cpp:236: note: 'godot_variant_new_array' was previously declared here
  236 | void GDAPI godot_variant_new_array(godot_variant *r_dest, const godot_array *p_arr) {
      | 
modules/gdnative/gdnative/variant.cpp:236: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/array.h:114: warning: 'godot_array_push_back' violates the C++ One Definition Rule [-Wodr]
  114 | void GDAPI godot_array_push_back(godot_array *p_self, const godot_variant *p_value);
      | 
modules/gdnative/gdnative/array.cpp:299:12: note: type mismatch in parameter 1
  299 | void GDAPI godot_array_push_back(godot_array *p_self, const godot_variant *p_value) {
      |            ^
modules/gdnative/gdnative/array.cpp:299:12: note: 'godot_array_push_back' was previously declared here
modules/gdnative/gdnative/array.cpp:299:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:175: warning: 'godot_string_sprintf' violates the C++ One Definition Rule [-Wodr]
  175 | godot_string GDAPI godot_string_sprintf(const godot_string *p_self, const godot_array *p_values, godot_bool *p_error);
      | 
modules/gdnative/gdnative/string.cpp:579:20: note: type mismatch in parameter 1
  579 | godot_string GDAPI godot_string_sprintf(const godot_string *p_self, const godot_array *p_values, godot_bool *p_error) {
      |                    ^
modules/gdnative/gdnative/string.cpp:579:20: note: 'godot_string_sprintf' was previously declared here
modules/gdnative/include/gdnative/array.h:134: warning: 'godot_array_destroy' violates the C++ One Definition Rule [-Wodr]
  134 | void GDAPI godot_array_destroy(godot_array *p_self);
      | 
modules/gdnative/gdnative/array.cpp:354:12: note: type mismatch in parameter 1
  354 | void GDAPI godot_array_destroy(godot_array *p_self) {
      |            ^
modules/gdnative/gdnative/array.cpp:354:12: note: 'godot_array_destroy' was previously declared here
modules/gdnative/include/gdnative/string.h:147: warning: 'godot_string_hex_to_int_with_prefix' violates the C++ One Definition Rule [-Wodr]
  147 | godot_int GDAPI godot_string_hex_to_int_with_prefix(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:664:17: note: type mismatch in parameter 1
  664 | godot_int GDAPI godot_string_hex_to_int_with_prefix(const godot_string *p_self) {
      |                 ^
modules/gdnative/gdnative/string.cpp:664:17: note: 'godot_string_hex_to_int_with_prefix' was previously declared here
modules/gdnative/include/gdnative/string.h:146: warning: 'godot_string_hex_to_int' violates the C++ One Definition Rule [-Wodr]
  146 | godot_int GDAPI godot_string_hex_to_int(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:658:17: note: type mismatch in parameter 1
  658 | godot_int GDAPI godot_string_hex_to_int(const godot_string *p_self) {
      |                 ^
modules/gdnative/gdnative/string.cpp:658:17: note: 'godot_string_hex_to_int' was previously declared here
modules/gdnative/include/gdnative/string.h:244: warning: 'godot_string_hash' violates the C++ One Definition Rule [-Wodr]
  244 | uint32_t GDAPI godot_string_hash(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1017: note: type mismatch in parameter 1
 1017 | uint32_t GDAPI godot_string_hash(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1017: note: 'godot_string_hash' was previously declared here
modules/gdnative/include/gdnative/string.h:245: warning: 'godot_string_hash64' violates the C++ One Definition Rule [-Wodr]
  245 | uint64_t GDAPI godot_string_hash64(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1023: note: type mismatch in parameter 1
 1023 | uint64_t GDAPI godot_string_hash64(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1023: note: 'godot_string_hash64' was previously declared here
modules/gdnative/include/gdnative/string.h:264: warning: 'godot_string_humanize_size' violates the C++ One Definition Rule [-Wodr]
  264 | godot_string GDAPI godot_string_humanize_size(uint64_t p_size);
      | 
modules/gdnative/gdnative/string.cpp:1115: note: 'godot_string_humanize_size' was previously declared here
 1115 | godot_string GDAPI godot_string_humanize_size(uint64_t p_size) {
      | 
modules/gdnative/include/gdnative/packed_arrays.h:348: warning: 'godot_packed_string_array_new' violates the C++ One Definition Rule [-Wodr]
  348 | void GDAPI godot_packed_string_array_new(godot_packed_string_array *r_dest);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:580:12: note: type mismatch in parameter 1
  580 | void GDAPI godot_packed_string_array_new(godot_packed_string_array *r_dest) {
      |            ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/packed_arrays.cpp:580:12: note: 'godot_packed_string_array_new' was previously declared here
  580 | void GDAPI godot_packed_string_array_new(godot_packed_string_array *r_dest) {
      |            ^
modules/gdnative/gdnative/packed_arrays.cpp:580:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:367: warning: 'godot_packed_string_array_push_back' violates the C++ One Definition Rule [-Wodr]
  367 | void GDAPI godot_packed_string_array_push_back(godot_packed_string_array *p_self, const godot_string *p_data);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:646:12: note: type mismatch in parameter 1
  646 | void GDAPI godot_packed_string_array_push_back(godot_packed_string_array *p_self, const godot_string *p_data) {
      |            ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/packed_arrays.cpp:646:12: note: 'godot_packed_string_array_push_back' was previously declared here
  646 | void GDAPI godot_packed_string_array_push_back(godot_packed_string_array *p_self, const godot_string *p_data) {
      |            ^
modules/gdnative/gdnative/packed_arrays.cpp:646:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:284: warning: 'godot_string_join' violates the C++ One Definition Rule [-Wodr]
  284 | godot_string GDAPI godot_string_join(const godot_string *p_self, const godot_packed_string_array *p_parts);
      | 
modules/gdnative/gdnative/string.cpp:1269: note: type mismatch in parameter 1
 1269 | godot_string GDAPI godot_string_join(const godot_string *p_self, const godot_packed_string_array *p_parts) {
      | 
modules/gdnative/gdnative/string.cpp:1269: note: 'godot_string_join' was previously declared here
modules/gdnative/gdnative/string.cpp:1269: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:380: warning: 'godot_packed_string_array_destroy' violates the C++ One Definition Rule [-Wodr]
  380 | void GDAPI godot_packed_string_array_destroy(godot_packed_string_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:687:12: note: type mismatch in parameter 1
  687 | void GDAPI godot_packed_string_array_destroy(godot_packed_string_array *p_self) {
      |            ^
modules/gdnative/include/gdnative/packed_arrays.h:103:3: note: type name 'godot_packed_string_array' should match type name 'TestGDNativeString::godot_packed_string_array'
  103 | } godot_packed_string_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:103: note: the incompatible type is defined here
  103 | } godot_packed_string_array;
      | 
modules/gdnative/gdnative/packed_arrays.cpp:687:12: note: 'godot_packed_string_array_destroy' was previously declared here
  687 | void GDAPI godot_packed_string_array_destroy(godot_packed_string_array *p_self) {
      |            ^
modules/gdnative/gdnative/packed_arrays.cpp:687:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:254: warning: 'godot_string_sha1_buffer' violates the C++ One Definition Rule [-Wodr]
  254 | godot_packed_byte_array GDAPI godot_string_sha1_buffer(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1060: note: return value type mismatch
 1060 | godot_packed_byte_array GDAPI godot_string_sha1_buffer(const godot_string *p_self) {
      | 
modules/gdnative/include/gdnative/packed_arrays.h:48:3: note: type name 'godot_packed_byte_array' should match type name 'TestGDNativeString::godot_packed_byte_array'
   48 | } godot_packed_byte_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:48: note: the incompatible type is defined here
   48 | } godot_packed_byte_array;
      | 
modules/gdnative/gdnative/string.cpp:1060: note: 'godot_string_sha1_buffer' was previously declared here
 1060 | godot_packed_byte_array GDAPI godot_string_sha1_buffer(const godot_string *p_self) {
      | 
modules/gdnative/include/gdnative/string.h:255: warning: 'godot_string_sha1_text' violates the C++ One Definition Rule [-Wodr]
  255 | godot_string GDAPI godot_string_sha1_text(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1067: note: type mismatch in parameter 1
 1067 | godot_string GDAPI godot_string_sha1_text(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1067: note: 'godot_string_sha1_text' was previously declared here
modules/gdnative/include/gdnative/string.h:256: warning: 'godot_string_sha256_buffer' violates the C++ One Definition Rule [-Wodr]
  256 | godot_packed_byte_array GDAPI godot_string_sha256_buffer(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1075: note: return value type mismatch
 1075 | godot_packed_byte_array GDAPI godot_string_sha256_buffer(const godot_string *p_self) {
      | 
modules/gdnative/include/gdnative/packed_arrays.h:48:3: note: type name 'godot_packed_byte_array' should match type name 'TestGDNativeString::godot_packed_byte_array'
   48 | } godot_packed_byte_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:48: note: the incompatible type is defined here
   48 | } godot_packed_byte_array;
      | 
modules/gdnative/gdnative/string.cpp:1075: note: 'godot_string_sha256_buffer' was previously declared here
 1075 | godot_packed_byte_array GDAPI godot_string_sha256_buffer(const godot_string *p_self) {
      | 
modules/gdnative/include/gdnative/string.h:257: warning: 'godot_string_sha256_text' violates the C++ One Definition Rule [-Wodr]
  257 | godot_string GDAPI godot_string_sha256_text(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1082: note: type mismatch in parameter 1
 1082 | godot_string GDAPI godot_string_sha256_text(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1082: note: 'godot_string_sha256_text' was previously declared here
modules/gdnative/include/gdnative/string.h:252: warning: 'godot_string_md5_buffer' violates the C++ One Definition Rule [-Wodr]
  252 | godot_packed_byte_array GDAPI godot_string_md5_buffer(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1045: note: return value type mismatch
 1045 | godot_packed_byte_array GDAPI godot_string_md5_buffer(const godot_string *p_self) {
      | 
modules/gdnative/include/gdnative/packed_arrays.h:48:3: note: type name 'godot_packed_byte_array' should match type name 'TestGDNativeString::godot_packed_byte_array'
   48 | } godot_packed_byte_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:48: note: the incompatible type is defined here
   48 | } godot_packed_byte_array;
      | 
modules/gdnative/gdnative/string.cpp:1045: note: 'godot_string_md5_buffer' was previously declared here
 1045 | godot_packed_byte_array GDAPI godot_string_md5_buffer(const godot_string *p_self) {
      | 
modules/gdnative/include/gdnative/packed_arrays.h:172: warning: 'godot_packed_byte_array_ptr' violates the C++ One Definition Rule [-Wodr]
  172 | const uint8_t GDAPI *godot_packed_byte_array_ptr(const godot_packed_byte_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:82:22: note: type mismatch in parameter 1
   82 | const uint8_t GDAPI *godot_packed_byte_array_ptr(const godot_packed_byte_array *p_self) {
      |                      ^
modules/gdnative/gdnative/packed_arrays.cpp:82:22: note: type name 'godot_packed_byte_array' should match type name 'TestGDNativeString::godot_packed_byte_array'
modules/gdnative/gdnative/packed_arrays.cpp:82:22: note: 'godot_packed_byte_array_ptr' was previously declared here
modules/gdnative/gdnative/packed_arrays.cpp:82:22: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/packed_arrays.h:200: warning: 'godot_packed_byte_array_destroy' violates the C++ One Definition Rule [-Wodr]
  200 | void GDAPI godot_packed_byte_array_destroy(godot_packed_byte_array *p_self);
      | 
modules/gdnative/gdnative/packed_arrays.cpp:158:12: note: type mismatch in parameter 1
  158 | void GDAPI godot_packed_byte_array_destroy(godot_packed_byte_array *p_self) {
      |            ^
modules/gdnative/include/gdnative/packed_arrays.h:48:3: note: type name 'godot_packed_byte_array' should match type name 'TestGDNativeString::godot_packed_byte_array'
   48 | } godot_packed_byte_array;
      |   ^
modules/gdnative/include/gdnative/packed_arrays.h:48: note: the incompatible type is defined here
   48 | } godot_packed_byte_array;
      | 
modules/gdnative/gdnative/packed_arrays.cpp:158:12: note: 'godot_packed_byte_array_destroy' was previously declared here
  158 | void GDAPI godot_packed_byte_array_destroy(godot_packed_byte_array *p_self) {
      |            ^
modules/gdnative/gdnative/packed_arrays.cpp:158:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:253: warning: 'godot_string_md5_text' violates the C++ One Definition Rule [-Wodr]
  253 | godot_string GDAPI godot_string_md5_text(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1052: note: type mismatch in parameter 1
 1052 | godot_string GDAPI godot_string_md5_text(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1052: note: 'godot_string_md5_text' was previously declared here
modules/gdnative/include/gdnative/string.h:227: warning: 'godot_string_repeat' violates the C++ One Definition Rule [-Wodr]
  227 | godot_string GDAPI godot_string_repeat(const godot_string *p_self, godot_int p_count);
      | 
modules/gdnative/gdnative/string.cpp:896:20: note: type mismatch in parameter 1
  896 | godot_string GDAPI godot_string_repeat(const godot_string *p_self, godot_int p_count) {
      |                    ^
modules/gdnative/gdnative/string.cpp:896:20: note: 'godot_string_repeat' was previously declared here
modules/gdnative/include/gdnative/string.h:226: warning: 'godot_string_right' violates the C++ One Definition Rule [-Wodr]
  226 | godot_string GDAPI godot_string_right(const godot_string *p_self, godot_int p_pos);
      | 
modules/gdnative/gdnative/string.cpp:888:20: note: type mismatch in parameter 1
  888 | godot_string GDAPI godot_string_right(const godot_string *p_self, godot_int p_pos) {
      |                    ^
modules/gdnative/gdnative/string.cpp:888:20: note: 'godot_string_right' was previously declared here
modules/gdnative/include/gdnative/string.h:223: warning: 'godot_string_left' violates the C++ One Definition Rule [-Wodr]
  223 | godot_string GDAPI godot_string_left(const godot_string *p_self, godot_int p_pos);
      | 
modules/gdnative/gdnative/string.cpp:865:20: note: type mismatch in parameter 1
  865 | godot_string GDAPI godot_string_left(const godot_string *p_self, godot_int p_pos) {
      |                    ^
modules/gdnative/gdnative/string.cpp:865:20: note: 'godot_string_left' was previously declared here
modules/gdnative/include/gdnative/string.h:295: warning: 'godot_string_trim_prefix' violates the C++ One Definition Rule [-Wodr]
  295 | godot_string GDAPI godot_string_trim_prefix(const godot_string *p_self, const godot_string *p_prefix);
      | 
modules/gdnative/gdnative/string.cpp:1330: note: type mismatch in parameter 1
 1330 | godot_string GDAPI godot_string_trim_prefix(const godot_string *p_self, const godot_string *p_prefix) {
      | 
modules/gdnative/gdnative/string.cpp:1330: note: 'godot_string_trim_prefix' was previously declared here
modules/gdnative/include/gdnative/string.h:296: warning: 'godot_string_trim_suffix' violates the C++ One Definition Rule [-Wodr]
  296 | godot_string GDAPI godot_string_trim_suffix(const godot_string *p_self, const godot_string *p_suffix);
      | 
modules/gdnative/gdnative/string.cpp:1340: note: type mismatch in parameter 1
 1340 | godot_string GDAPI godot_string_trim_suffix(const godot_string *p_self, const godot_string *p_suffix) {
      | 
modules/gdnative/gdnative/string.cpp:1340: note: 'godot_string_trim_suffix' was previously declared here
modules/gdnative/include/gdnative/string.h:228: warning: 'godot_string_strip_edges' violates the C++ One Definition Rule [-Wodr]
  228 | godot_string GDAPI godot_string_strip_edges(const godot_string *p_self, godot_bool p_left, godot_bool p_right);
      | 
modules/gdnative/gdnative/string.cpp:904:20: note: type mismatch in parameter 1
  904 | godot_string GDAPI godot_string_strip_edges(const godot_string *p_self, godot_bool p_left, godot_bool p_right) {
      |                    ^
modules/gdnative/gdnative/string.cpp:904:20: note: 'godot_string_strip_edges' was previously declared here
modules/gdnative/include/gdnative/string.h:229: warning: 'godot_string_strip_escapes' violates the C++ One Definition Rule [-Wodr]
  229 | godot_string GDAPI godot_string_strip_escapes(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:912:20: note: type mismatch in parameter 1
  912 | godot_string GDAPI godot_string_strip_escapes(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:912:20: note: 'godot_string_strip_escapes' was previously declared here
modules/gdnative/include/gdnative/string.h:279: warning: 'godot_string_xml_escape_with_quotes' violates the C++ One Definition Rule [-Wodr]
  279 | godot_string GDAPI godot_string_xml_escape_with_quotes(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1233: note: type mismatch in parameter 1
 1233 | godot_string GDAPI godot_string_xml_escape_with_quotes(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1233: note: 'godot_string_xml_escape_with_quotes' was previously declared here
modules/gdnative/include/gdnative/string.h:278: warning: 'godot_string_xml_escape' violates the C++ One Definition Rule [-Wodr]
  278 | godot_string GDAPI godot_string_xml_escape(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1224: note: type mismatch in parameter 1
 1224 | godot_string GDAPI godot_string_xml_escape(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1224: note: 'godot_string_xml_escape' was previously declared here
modules/gdnative/include/gdnative/string.h:280: warning: 'godot_string_xml_unescape' violates the C++ One Definition Rule [-Wodr]
  280 | godot_string GDAPI godot_string_xml_unescape(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1242: note: type mismatch in parameter 1
 1242 | godot_string GDAPI godot_string_xml_unescape(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1242: note: 'godot_string_xml_unescape' was previously declared here
modules/gdnative/include/gdnative/string.h:283: warning: 'godot_string_percent_encode' violates the C++ One Definition Rule [-Wodr]
  283 | godot_string GDAPI godot_string_percent_encode(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1260: note: type mismatch in parameter 1
 1260 | godot_string GDAPI godot_string_percent_encode(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1260: note: 'godot_string_percent_encode' was previously declared here
modules/gdnative/include/gdnative/string.h:282: warning: 'godot_string_percent_decode' violates the C++ One Definition Rule [-Wodr]
  282 | godot_string GDAPI godot_string_percent_decode(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1251: note: type mismatch in parameter 1
 1251 | godot_string GDAPI godot_string_percent_decode(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1251: note: 'godot_string_percent_decode' was previously declared here
modules/gdnative/include/gdnative/string.h:275: warning: 'godot_string_http_escape' violates the C++ One Definition Rule [-Wodr]
  275 | godot_string GDAPI godot_string_http_escape(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1197: note: type mismatch in parameter 1
 1197 | godot_string GDAPI godot_string_http_escape(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1197: note: 'godot_string_http_escape' was previously declared here
modules/gdnative/include/gdnative/string.h:276: warning: 'godot_string_http_unescape' violates the C++ One Definition Rule [-Wodr]
  276 | godot_string GDAPI godot_string_http_unescape(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1206: note: type mismatch in parameter 1
 1206 | godot_string GDAPI godot_string_http_unescape(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1206: note: 'godot_string_http_unescape' was previously declared here
modules/gdnative/include/gdnative/string.h:294: warning: 'godot_string_dedent' violates the C++ One Definition Rule [-Wodr]
  294 | godot_string GDAPI godot_string_dedent(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1321: note: type mismatch in parameter 1
 1321 | godot_string GDAPI godot_string_dedent(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1321: note: 'godot_string_dedent' was previously declared here
modules/gdnative/include/gdnative/string.h:272: warning: 'godot_string_c_escape' violates the C++ One Definition Rule [-Wodr]
  272 | godot_string GDAPI godot_string_c_escape(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1170: note: type mismatch in parameter 1
 1170 | godot_string GDAPI godot_string_c_escape(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1170: note: 'godot_string_c_escape' was previously declared here
modules/gdnative/include/gdnative/string.h:274: warning: 'godot_string_c_unescape' violates the C++ One Definition Rule [-Wodr]
  274 | godot_string GDAPI godot_string_c_unescape(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1188: note: type mismatch in parameter 1
 1188 | godot_string GDAPI godot_string_c_unescape(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1188: note: 'godot_string_c_unescape' was previously declared here
modules/gdnative/include/gdnative/string.h:182: warning: 'godot_string_capitalize' violates the C++ One Definition Rule [-Wodr]
  182 | godot_string GDAPI godot_string_capitalize(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:610:20: note: type mismatch in parameter 1
  610 | godot_string GDAPI godot_string_capitalize(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:610:20: note: 'godot_string_capitalize' was previously declared here
modules/gdnative/include/gdnative/string.h:153: warning: 'godot_string_lpad_with_custom_character' violates the C++ One Definition Rule [-Wodr]
  153 | godot_string GDAPI godot_string_lpad_with_custom_character(const godot_string *p_self, godot_int p_min_length, const godot_string *p_character);
      | 
modules/gdnative/gdnative/string.cpp:409:20: note: type mismatch in parameter 1
  409 | godot_string GDAPI godot_string_lpad_with_custom_character(const godot_string *p_self, godot_int p_min_length, const godot_string *p_character) {
      |                    ^
modules/gdnative/gdnative/string.cpp:409:20: note: 'godot_string_lpad_with_custom_character' was previously declared here
modules/gdnative/include/gdnative/string.h:173: warning: 'godot_string_rpad_with_custom_character' violates the C++ One Definition Rule [-Wodr]
  173 | godot_string GDAPI godot_string_rpad_with_custom_character(const godot_string *p_self, godot_int p_min_length, const godot_string *p_character);
      | 
modules/gdnative/gdnative/string.cpp:563:20: note: type mismatch in parameter 1
  563 | godot_string GDAPI godot_string_rpad_with_custom_character(const godot_string *p_self, godot_int p_min_length, const godot_string *p_character) {
      |                    ^
modules/gdnative/gdnative/string.cpp:563:20: note: 'godot_string_rpad_with_custom_character' was previously declared here
modules/gdnative/include/gdnative/string.h:163: warning: 'godot_string_pad_decimals' violates the C++ One Definition Rule [-Wodr]
  163 | godot_string GDAPI godot_string_pad_decimals(const godot_string *p_self, godot_int p_digits);
      | 
modules/gdnative/gdnative/string.cpp:481:20: note: type mismatch in parameter 1
  481 | godot_string GDAPI godot_string_pad_decimals(const godot_string *p_self, godot_int p_digits) {
      |                    ^
modules/gdnative/gdnative/string.cpp:481:20: note: 'godot_string_pad_decimals' was previously declared here
modules/gdnative/include/gdnative/string.h:164: warning: 'godot_string_pad_zeros' violates the C++ One Definition Rule [-Wodr]
  164 | godot_string GDAPI godot_string_pad_zeros(const godot_string *p_self, godot_int p_digits);
      | 
modules/gdnative/gdnative/string.cpp:489:20: note: type mismatch in parameter 1
  489 | godot_string GDAPI godot_string_pad_zeros(const godot_string *p_self, godot_int p_digits) {
      |                    ^
modules/gdnative/gdnative/string.cpp:489:20: note: 'godot_string_pad_zeros' was previously declared here
modules/gdnative/include/gdnative/dictionary.h:62: warning: 'godot_dictionary_new' violates the C++ One Definition Rule [-Wodr]
   62 | void GDAPI godot_dictionary_new(godot_dictionary *r_dest);
      | 
modules/gdnative/gdnative/dictionary.cpp:44:12: note: type mismatch in parameter 1
   44 | void GDAPI godot_dictionary_new(godot_dictionary *r_dest) {
      |            ^
modules/gdnative/gdnative/dictionary.cpp:44:12: note: 'godot_dictionary_new' was previously declared here
modules/gdnative/include/gdnative/variant.h:188: warning: 'godot_variant_new_int' violates the C++ One Definition Rule [-Wodr]
  188 | void GDAPI godot_variant_new_int(godot_variant *r_dest, const int64_t p_i);
      | 
modules/gdnative/gdnative/variant.cpp:86: note: type mismatch in parameter 1
   86 | void GDAPI godot_variant_new_int(godot_variant *r_dest, const int64_t p_i) {
      | 
modules/gdnative/include/gdnative/variant.h:46:3: note: type name 'godot_variant' should match type name 'TestGDNativeString::godot_variant'
   46 | } godot_variant;
      |   ^
modules/gdnative/include/gdnative/variant.h:46: note: the incompatible type is defined here
   46 | } godot_variant;
      | 
modules/gdnative/gdnative/variant.cpp:86: note: 'godot_variant_new_int' was previously declared here
   86 | void GDAPI godot_variant_new_int(godot_variant *r_dest, const int64_t p_i) {
      | 
modules/gdnative/gdnative/variant.cpp:86: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/variant.h:190: warning: 'godot_variant_new_string' violates the C++ One Definition Rule [-Wodr]
  190 | void GDAPI godot_variant_new_string(godot_variant *r_dest, const godot_string *p_s);
      | 
modules/gdnative/gdnative/variant.cpp:96: note: type mismatch in parameter 1
   96 | void GDAPI godot_variant_new_string(godot_variant *r_dest, const godot_string *p_s) {
      | 
modules/gdnative/include/gdnative/variant.h:46:3: note: type name 'godot_variant' should match type name 'TestGDNativeString::godot_variant'
   46 | } godot_variant;
      |   ^
modules/gdnative/include/gdnative/variant.h:46: note: the incompatible type is defined here
   46 | } godot_variant;
      | 
modules/gdnative/gdnative/variant.cpp:96: note: 'godot_variant_new_string' was previously declared here
   96 | void GDAPI godot_variant_new_string(godot_variant *r_dest, const godot_string *p_s) {
      | 
modules/gdnative/gdnative/variant.cpp:96: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/variant.h:189: warning: 'godot_variant_new_real' violates the C++ One Definition Rule [-Wodr]
  189 | void GDAPI godot_variant_new_real(godot_variant *r_dest, const double p_r);
      | 
modules/gdnative/gdnative/variant.cpp:91: note: type mismatch in parameter 1
   91 | void GDAPI godot_variant_new_real(godot_variant *r_dest, const double p_r) {
      | 
modules/gdnative/include/gdnative/variant.h:46:3: note: type name 'godot_variant' should match type name 'TestGDNativeString::godot_variant'
   46 | } godot_variant;
      |   ^
modules/gdnative/include/gdnative/variant.h:46: note: the incompatible type is defined here
   46 | } godot_variant;
      | 
modules/gdnative/gdnative/variant.cpp:91: note: 'godot_variant_new_real' was previously declared here
   91 | void GDAPI godot_variant_new_real(godot_variant *r_dest, const double p_r) {
      | 
modules/gdnative/gdnative/variant.cpp:91: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/dictionary.h:87: warning: 'godot_dictionary_set' violates the C++ One Definition Rule [-Wodr]
   87 | void GDAPI godot_dictionary_set(godot_dictionary *p_self, const godot_variant *p_key, const godot_variant *p_value);
      | 
modules/gdnative/gdnative/dictionary.cpp:130:12: note: type mismatch in parameter 1
  130 | void GDAPI godot_dictionary_set(godot_dictionary *p_self, const godot_variant *p_key, const godot_variant *p_value) {
      |            ^
modules/gdnative/gdnative/dictionary.cpp:130:12: note: 'godot_dictionary_set' was previously declared here
modules/gdnative/gdnative/dictionary.cpp:130:12: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/variant.h:210: warning: 'godot_variant_new_dictionary' violates the C++ One Definition Rule [-Wodr]
  210 | void GDAPI godot_variant_new_dictionary(godot_variant *r_dest, const godot_dictionary *p_dict);
      | 
modules/gdnative/gdnative/variant.cpp:230: note: type mismatch in parameter 1
  230 | void GDAPI godot_variant_new_dictionary(godot_variant *r_dest, const godot_dictionary *p_dict) {
      | 
modules/gdnative/include/gdnative/variant.h:46:3: note: type name 'godot_variant' should match type name 'TestGDNativeString::godot_variant'
   46 | } godot_variant;
      |   ^
modules/gdnative/include/gdnative/variant.h:46: note: the incompatible type is defined here
   46 | } godot_variant;
      | 
modules/gdnative/gdnative/variant.cpp:230: note: 'godot_variant_new_dictionary' was previously declared here
  230 | void GDAPI godot_variant_new_dictionary(godot_variant *r_dest, const godot_dictionary *p_dict) {
      | 
modules/gdnative/gdnative/variant.cpp:230: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:144: warning: 'godot_string_format_with_custom_placeholder' violates the C++ One Definition Rule [-Wodr]
  144 | godot_string GDAPI godot_string_format_with_custom_placeholder(const godot_string *p_self, const godot_variant *p_values, const char *p_placeholder);
      | 
modules/gdnative/gdnative/string.cpp:355:20: note: type mismatch in parameter 1
  355 | godot_string GDAPI godot_string_format_with_custom_placeholder(const godot_string *p_self, const godot_variant *p_values, const char *p_placeholder) {
      |                    ^
modules/gdnative/gdnative/string.cpp:355:20: note: 'godot_string_format_with_custom_placeholder' was previously declared here
modules/gdnative/gdnative/string.cpp:355:20: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/dictionary.h:64: warning: 'godot_dictionary_destroy' violates the C++ One Definition Rule [-Wodr]
   64 | void GDAPI godot_dictionary_destroy(godot_dictionary *p_self);
      | 
modules/gdnative/gdnative/dictionary.cpp:55:12: note: type mismatch in parameter 1
   55 | void GDAPI godot_dictionary_destroy(godot_dictionary *p_self) {
      |            ^
modules/gdnative/gdnative/dictionary.cpp:55:12: note: 'godot_dictionary_destroy' was previously declared here
modules/gdnative/include/gdnative/variant.h:270: warning: 'godot_variant_destroy' violates the C++ One Definition Rule [-Wodr]
  270 | void GDAPI godot_variant_destroy(godot_variant *p_self);
      | 
modules/gdnative/gdnative/variant.cpp:624: note: type mismatch in parameter 1
  624 | void GDAPI godot_variant_destroy(godot_variant *p_self) {
      | 
modules/gdnative/include/gdnative/variant.h:46:3: note: type name 'godot_variant' should match type name 'TestGDNativeString::godot_variant'
   46 | } godot_variant;
      |   ^
modules/gdnative/include/gdnative/variant.h:46: note: the incompatible type is defined here
   46 | } godot_variant;
      | 
modules/gdnative/gdnative/variant.cpp:624: note: 'godot_variant_destroy' was previously declared here
  624 | void GDAPI godot_variant_destroy(godot_variant *p_self) {
      | 
modules/gdnative/gdnative/variant.cpp:624: note: code may be misoptimized unless '-fno-strict-aliasing' is used
modules/gdnative/include/gdnative/string.h:120: warning: 'godot_string_length' violates the C++ One Definition Rule [-Wodr]
  120 | /*+++*/ godot_int GDAPI godot_string_length(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:212:17: note: type mismatch in parameter 1
  212 | godot_int GDAPI godot_string_length(const godot_string *p_self) {
      |                 ^
modules/gdnative/gdnative/string.cpp:212:17: note: 'godot_string_length' was previously declared here
modules/gdnative/include/gdnative/string.h:231: warning: 'godot_string_erase' violates the C++ One Definition Rule [-Wodr]
  231 | void GDAPI godot_string_erase(godot_string *p_self, godot_int p_pos, godot_int p_chars);
      | 
modules/gdnative/gdnative/string.cpp:920:12: note: type mismatch in parameter 1
  920 | void GDAPI godot_string_erase(godot_string *p_self, godot_int p_pos, godot_int p_chars) {
      |            ^
modules/gdnative/gdnative/string.cpp:920:12: note: 'godot_string_erase' was previously declared here
modules/gdnative/include/gdnative/string.h:193: warning: 'godot_string_get_slice_count' violates the C++ One Definition Rule [-Wodr]
  193 | godot_int GDAPI godot_string_get_slice_count(const godot_string *p_self, const godot_string *p_splitter);
      | 
modules/gdnative/gdnative/string.cpp:818:17: note: type mismatch in parameter 1
  818 | godot_int GDAPI godot_string_get_slice_count(const godot_string *p_self, const godot_string *p_splitter) {
      |                 ^
modules/gdnative/gdnative/string.cpp:818:17: note: 'godot_string_get_slice_count' was previously declared here
modules/gdnative/include/gdnative/string.h:194: warning: 'godot_string_get_slice' violates the C++ One Definition Rule [-Wodr]
  194 | godot_string GDAPI godot_string_get_slice(const godot_string *p_self, const godot_string *p_splitter, godot_int p_slice);
      | 
modules/gdnative/gdnative/string.cpp:670:20: note: type mismatch in parameter 1
  670 | godot_string GDAPI godot_string_get_slice(const godot_string *p_self, const godot_string *p_splitter, godot_int p_slice) {
      |                    ^
modules/gdnative/gdnative/string.cpp:670:20: note: 'godot_string_get_slice' was previously declared here
modules/gdnative/include/gdnative/string.h:195: warning: 'godot_string_get_slicec' violates the C++ One Definition Rule [-Wodr]
  195 | godot_string GDAPI godot_string_get_slicec(const godot_string *p_self, godot_char_type p_splitter, godot_int p_slice);
      | 
modules/gdnative/gdnative/string.cpp:679:20: note: type mismatch in parameter 1
  679 | godot_string GDAPI godot_string_get_slicec(const godot_string *p_self, godot_char_type p_splitter, godot_int p_slice) {
      |                    ^
modules/gdnative/gdnative/string.cpp:679:20: note: 'godot_string_get_slicec' was previously declared here
modules/gdnative/include/gdnative/string.h:180: warning: 'godot_string_camelcase_to_underscore' violates the C++ One Definition Rule [-Wodr]
  180 | godot_string GDAPI godot_string_camelcase_to_underscore(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:618:20: note: type mismatch in parameter 1
  618 | godot_string GDAPI godot_string_camelcase_to_underscore(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:618:20: note: 'godot_string_camelcase_to_underscore' was previously declared here
modules/gdnative/include/gdnative/string.h:181: warning: 'godot_string_camelcase_to_underscore_lowercased' violates the C++ One Definition Rule [-Wodr]
  181 | godot_string GDAPI godot_string_camelcase_to_underscore_lowercased(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:626:20: note: type mismatch in parameter 1
  626 | godot_string GDAPI godot_string_camelcase_to_underscore_lowercased(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:626:20: note: 'godot_string_camelcase_to_underscore_lowercased' was previously declared here
modules/gdnative/include/gdnative/string.h:157: warning: 'godot_string_num' violates the C++ One Definition Rule [-Wodr]
  157 | godot_string GDAPI godot_string_num(double p_num);
      | 
modules/gdnative/gdnative/string.cpp:439:20: note: 'godot_string_num' was previously declared here
  439 | godot_string GDAPI godot_string_num(double p_num) {
      |                    ^
modules/gdnative/include/gdnative/string.h:162: warning: 'godot_string_num_with_decimals' violates the C++ One Definition Rule [-Wodr]
  162 | godot_string GDAPI godot_string_num_with_decimals(double p_num, godot_int p_decimals);
      | 
modules/gdnative/gdnative/string.cpp:474:20: note: 'godot_string_num_with_decimals' was previously declared here
  474 | godot_string GDAPI godot_string_num_with_decimals(double p_num, godot_int p_decimals) {
      |                    ^
modules/gdnative/include/gdnative/string.h:160: warning: 'godot_string_num_real' violates the C++ One Definition Rule [-Wodr]
  160 | godot_string GDAPI godot_string_num_real(double p_num);
      | 
modules/gdnative/gdnative/string.cpp:460:20: note: 'godot_string_num_real' was previously declared here
  460 | godot_string GDAPI godot_string_num_real(double p_num) {
      |                    ^
modules/gdnative/include/gdnative/string.h:161: warning: 'godot_string_num_scientific' violates the C++ One Definition Rule [-Wodr]
  161 | godot_string GDAPI godot_string_num_scientific(double p_num);
      | 
modules/gdnative/gdnative/string.cpp:467:20: note: 'godot_string_num_scientific' was previously declared here
  467 | godot_string GDAPI godot_string_num_scientific(double p_num) {
      |                    ^
modules/gdnative/include/gdnative/string.h:158: warning: 'godot_string_num_int64' violates the C++ One Definition Rule [-Wodr]
  158 | godot_string GDAPI godot_string_num_int64(int64_t p_num, godot_int p_base);
      | 
modules/gdnative/gdnative/string.cpp:446:20: note: 'godot_string_num_int64' was previously declared here
  446 | godot_string GDAPI godot_string_num_int64(int64_t p_num, godot_int p_base) {
      |                    ^
modules/gdnative/include/gdnative/string.h:159: warning: 'godot_string_num_int64_capitalized' violates the C++ One Definition Rule [-Wodr]
  159 | godot_string GDAPI godot_string_num_int64_capitalized(int64_t p_num, godot_int p_base, godot_bool p_capitalize_hex);
      | 
modules/gdnative/gdnative/string.cpp:453:20: note: 'godot_string_num_int64_capitalized' was previously declared here
  453 | godot_string GDAPI godot_string_num_int64_capitalized(int64_t p_num, godot_int p_base, godot_bool p_capitalize_hex) {
      |                    ^
modules/gdnative/include/gdnative/string.h:136: warning: 'godot_string_find' violates the C++ One Definition Rule [-Wodr]
  136 | godot_int GDAPI godot_string_find(const godot_string *p_self, const godot_string *p_what);
      | 
modules/gdnative/gdnative/string.cpp:295:17: note: type mismatch in parameter 1
  295 | godot_int GDAPI godot_string_find(const godot_string *p_self, const godot_string *p_what) {
      |                 ^
modules/gdnative/gdnative/string.cpp:295:17: note: 'godot_string_find' was previously declared here
modules/gdnative/include/gdnative/string.h:148: warning: 'godot_string_insert' violates the C++ One Definition Rule [-Wodr]
  148 | godot_string GDAPI godot_string_insert(const godot_string *p_self, godot_int p_at_pos, const godot_string *p_string);
      | 
modules/gdnative/gdnative/string.cpp:372:20: note: type mismatch in parameter 1
  372 | godot_string GDAPI godot_string_insert(const godot_string *p_self, godot_int p_at_pos, const godot_string *p_string) {
      |                    ^
modules/gdnative/gdnative/string.cpp:372:20: note: 'godot_string_insert' was previously declared here
modules/gdnative/include/gdnative/string.h:166: warning: 'godot_string_replace' violates the C++ One Definition Rule [-Wodr]
  166 | godot_string GDAPI godot_string_replace(const godot_string *p_self, const godot_string *p_key, const godot_string *p_with);
      | 
modules/gdnative/gdnative/string.cpp:497:20: note: type mismatch in parameter 1
  497 | godot_string GDAPI godot_string_replace(const godot_string *p_self, const godot_string *p_key, const godot_string *p_with) {
      |                    ^
modules/gdnative/gdnative/string.cpp:497:20: note: 'godot_string_replace' was previously declared here
modules/gdnative/include/gdnative/string.h:165: warning: 'godot_string_replace_first' violates the C++ One Definition Rule [-Wodr]
  165 | godot_string GDAPI godot_string_replace_first(const godot_string *p_self, const godot_string *p_key, const godot_string *p_with);
      | 
modules/gdnative/gdnative/string.cpp:545:20: note: type mismatch in parameter 1
  545 | godot_string GDAPI godot_string_replace_first(const godot_string *p_self, const godot_string *p_key, const godot_string *p_with) {
      |                    ^
modules/gdnative/gdnative/string.cpp:545:20: note: 'godot_string_replace_first' was previously declared here
modules/gdnative/include/gdnative/string.h:176: warning: 'godot_string_substr' violates the C++ One Definition Rule [-Wodr]
  176 | godot_string GDAPI godot_string_substr(const godot_string *p_self, godot_int p_from, godot_int p_chars);
      | 
modules/gdnative/gdnative/string.cpp:590:20: note: type mismatch in parameter 1
  590 | godot_string GDAPI godot_string_substr(const godot_string *p_self, godot_int p_from, godot_int p_chars) {
      |                    ^
modules/gdnative/gdnative/string.cpp:590:20: note: 'godot_string_substr' was previously declared here
modules/gdnative/include/gdnative/string.h:145: warning: 'godot_string_hex_encode_buffer' violates the C++ One Definition Rule [-Wodr]
  145 | godot_string GDAPI godot_string_hex_encode_buffer(const uint8_t *p_buffer, godot_int p_len);
      | 
modules/gdnative/gdnative/string.cpp:365:20: note: 'godot_string_hex_encode_buffer' was previously declared here
  365 | godot_string GDAPI godot_string_hex_encode_buffer(const uint8_t *p_buffer, godot_int p_len) {
      |                    ^
modules/gdnative/include/gdnative/string.h:219: warning: 'godot_string_to_upper' violates the C++ One Definition Rule [-Wodr]
  219 | godot_string GDAPI godot_string_to_upper(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:841:20: note: type mismatch in parameter 1
  841 | godot_string GDAPI godot_string_to_upper(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:841:20: note: 'godot_string_to_upper' was previously declared here
modules/gdnative/include/gdnative/string.h:116: warning: 'godot_string_operator_plus' violates the C++ One Definition Rule [-Wodr]
  116 | godot_string GDAPI godot_string_operator_plus(const godot_string *p_self, const godot_string *p_b);
      | 
modules/gdnative/gdnative/string.cpp:197:20: note: type mismatch in parameter 1
  197 | godot_string GDAPI godot_string_operator_plus(const godot_string *p_self, const godot_string *p_b) {
      |                    ^
modules/gdnative/gdnative/string.cpp:197:20: note: 'godot_string_operator_plus' was previously declared here
modules/gdnative/include/gdnative/string.h:233: warning: 'godot_string_ascii' violates the C++ One Definition Rule [-Wodr]
  233 | godot_char_string GDAPI godot_string_ascii(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:926:25: note: type mismatch in parameter 1
  926 | godot_char_string GDAPI godot_string_ascii(const godot_string *p_self) {
      |                         ^
modules/gdnative/gdnative/string.cpp:926:25: note: 'godot_string_ascii' was previously declared here
modules/gdnative/include/gdnative/string.h:234: warning: 'godot_string_latin1' violates the C++ One Definition Rule [-Wodr]
  234 | godot_char_string GDAPI godot_string_latin1(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:935:25: note: type mismatch in parameter 1
  935 | godot_char_string GDAPI godot_string_latin1(const godot_string *p_self) {
      |                         ^
modules/gdnative/gdnative/string.cpp:935:25: note: 'godot_string_latin1' was previously declared here
modules/gdnative/include/gdnative/string.h:95: warning: 'godot_string_new' violates the C++ One Definition Rule [-Wodr]
   95 | void GDAPI godot_string_new(godot_string *r_dest);
      | 
modules/gdnative/gdnative/string.cpp:84:12: note: type mismatch in parameter 1
   84 | void GDAPI godot_string_new(godot_string *r_dest) {
      |            ^
modules/gdnative/gdnative/string.cpp:84:12: note: 'godot_string_new' was previously declared here
modules/gdnative/include/gdnative/string.h:96: warning: 'godot_string_new_copy' violates the C++ One Definition Rule [-Wodr]
   96 | void GDAPI godot_string_new_copy(godot_string *r_dest, const godot_string *p_src);
      | 
modules/gdnative/gdnative/string.cpp:89:12: note: type mismatch in parameter 1
   89 | void GDAPI godot_string_new_copy(godot_string *r_dest, const godot_string *p_src) {
      |            ^
modules/gdnative/gdnative/string.cpp:89:12: note: 'godot_string_new_copy' was previously declared here
modules/gdnative/include/gdnative/string.h:100: warning: 'godot_string_new_with_utf16_chars' violates the C++ One Definition Rule [-Wodr]
  100 | void GDAPI godot_string_new_with_utf16_chars(godot_string *r_dest, const char16_t *p_contents);
      | 
modules/gdnative/gdnative/string.cpp:108:12: note: type mismatch in parameter 1
  108 | void GDAPI godot_string_new_with_utf16_chars(godot_string *r_dest, const char16_t *p_contents) {
      |            ^
modules/gdnative/gdnative/string.cpp:108:12: note: 'godot_string_new_with_utf16_chars' was previously declared here
modules/gdnative/include/gdnative/string.h:106: warning: 'godot_string_new_with_utf16_chars_and_len' violates the C++ One Definition Rule [-Wodr]
  106 | void GDAPI godot_string_new_with_utf16_chars_and_len(godot_string *r_dest, const char16_t *p_contents, const int p_size);
      | 
modules/gdnative/gdnative/string.cpp:145:12: note: type mismatch in parameter 1
  145 | void GDAPI godot_string_new_with_utf16_chars_and_len(godot_string *r_dest, const char16_t *p_contents, const int p_size) {
      |            ^
modules/gdnative/gdnative/string.cpp:145:12: note: 'godot_string_new_with_utf16_chars_and_len' was previously declared here
modules/gdnative/include/gdnative/string.h:241: warning: 'godot_string_parse_utf16' violates the C++ One Definition Rule [-Wodr]
  241 | godot_bool GDAPI godot_string_parse_utf16(godot_string *p_self, const char16_t *p_utf16);
      | 
modules/gdnative/gdnative/string.cpp:991: note: type mismatch in parameter 1
  991 | godot_bool GDAPI godot_string_parse_utf16(godot_string *p_self, const char16_t *p_utf16) {
      | 
modules/gdnative/gdnative/string.cpp:991: note: 'godot_string_parse_utf16' was previously declared here
modules/gdnative/include/gdnative/string.h:240: warning: 'godot_string_utf16' violates the C++ One Definition Rule [-Wodr]
  240 | godot_char16_string GDAPI godot_string_utf16(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:981:27: note: type mismatch in parameter 1
  981 | godot_char16_string GDAPI godot_string_utf16(const godot_string *p_self) {
      |                           ^
modules/gdnative/gdnative/string.cpp:981:27: note: 'godot_string_utf16' was previously declared here
modules/gdnative/include/gdnative/string.h:91: warning: 'godot_char16_string_length' violates the C++ One Definition Rule [-Wodr]
   91 | godot_int GDAPI godot_char16_string_length(const godot_char16_string *p_cs);
      | 
modules/gdnative/gdnative/string.cpp:66:17: note: type mismatch in parameter 1
   66 | godot_int GDAPI godot_char16_string_length(const godot_char16_string *p_cs) {
      |                 ^
modules/gdnative/gdnative/string.cpp:66:17: note: 'godot_char16_string_length' was previously declared here
modules/gdnative/include/gdnative/string.h:92: warning: 'godot_char16_string_get_data' violates the C++ One Definition Rule [-Wodr]
   92 | const char16_t GDAPI *godot_char16_string_get_data(const godot_char16_string *p_cs);
      | 
modules/gdnative/gdnative/string.cpp:72:23: note: type mismatch in parameter 1
   72 | const char16_t GDAPI *godot_char16_string_get_data(const godot_char16_string *p_cs) {
      |                       ^
modules/gdnative/gdnative/string.cpp:72:23: note: 'godot_char16_string_get_data' was previously declared here
modules/gdnative/include/gdnative/string.h:242: warning: 'godot_string_parse_utf16_with_len' violates the C++ One Definition Rule [-Wodr]
  242 | godot_bool GDAPI godot_string_parse_utf16_with_len(godot_string *p_self, const char16_t *p_utf16, godot_int p_len);
      | 
modules/gdnative/gdnative/string.cpp:997: note: type mismatch in parameter 1
  997 | godot_bool GDAPI godot_string_parse_utf16_with_len(godot_string *p_self, const char16_t *p_utf16, godot_int p_len) {
      | 
modules/gdnative/gdnative/string.cpp:997: note: 'godot_string_parse_utf16_with_len' was previously declared here
modules/gdnative/include/gdnative/string.h:93: warning: 'godot_char16_string_destroy' violates the C++ One Definition Rule [-Wodr]
   93 | void GDAPI godot_char16_string_destroy(godot_char16_string *p_cs);
      | 
modules/gdnative/gdnative/string.cpp:78:12: note: type mismatch in parameter 1
   78 | void GDAPI godot_char16_string_destroy(godot_char16_string *p_cs) {
      |            ^
modules/gdnative/gdnative/string.cpp:78:12: note: 'godot_char16_string_destroy' was previously declared here
modules/gdnative/include/gdnative/string.h:105: warning: 'godot_string_new_with_utf8_chars_and_len' violates the C++ One Definition Rule [-Wodr]
  105 | void GDAPI godot_string_new_with_utf8_chars_and_len(godot_string *r_dest, const char *p_contents, const int p_size);
      | 
modules/gdnative/gdnative/string.cpp:139:12: note: type mismatch in parameter 1
  139 | void GDAPI godot_string_new_with_utf8_chars_and_len(godot_string *r_dest, const char *p_contents, const int p_size) {
      |            ^
modules/gdnative/gdnative/string.cpp:139:12: note: 'godot_string_new_with_utf8_chars_and_len' was previously declared here
modules/gdnative/include/gdnative/string.h:237: warning: 'godot_string_parse_utf8' violates the C++ One Definition Rule [-Wodr]
  237 | godot_bool GDAPI godot_string_parse_utf8(godot_string *p_self, const char *p_utf8);
      | 
modules/gdnative/gdnative/string.cpp:955:18: note: type mismatch in parameter 1
  955 | godot_bool GDAPI godot_string_parse_utf8(godot_string *p_self, const char *p_utf8) {
      |                  ^
modules/gdnative/gdnative/string.cpp:955:18: note: 'godot_string_parse_utf8' was previously declared here
modules/gdnative/include/gdnative/string.h:101: warning: 'godot_string_new_with_utf32_chars' violates the C++ One Definition Rule [-Wodr]
  101 | void GDAPI godot_string_new_with_utf32_chars(godot_string *r_dest, const char32_t *p_contents);
      | 
modules/gdnative/gdnative/string.cpp:114:12: note: type mismatch in parameter 1
  114 | void GDAPI godot_string_new_with_utf32_chars(godot_string *r_dest, const char32_t *p_contents) {
      |            ^
modules/gdnative/gdnative/string.cpp:114:12: note: 'godot_string_new_with_utf32_chars' was previously declared here
modules/gdnative/include/gdnative/string.h:236: warning: 'godot_string_utf8' violates the C++ One Definition Rule [-Wodr]
  236 | godot_char_string GDAPI godot_string_utf8(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:945:25: note: type mismatch in parameter 1
  945 | godot_char_string GDAPI godot_string_utf8(const godot_string *p_self) {
      |                         ^
modules/gdnative/gdnative/string.cpp:945:25: note: 'godot_string_utf8' was previously declared here
modules/gdnative/include/gdnative/string.h:87: warning: 'godot_char_string_length' violates the C++ One Definition Rule [-Wodr]
   87 | godot_int GDAPI godot_char_string_length(const godot_char_string *p_cs);
      | 
modules/gdnative/gdnative/string.cpp:48:17: note: type mismatch in parameter 1
   48 | godot_int GDAPI godot_char_string_length(const godot_char_string *p_cs) {
      |                 ^
modules/gdnative/gdnative/string.cpp:48:17: note: 'godot_char_string_length' was previously declared here
modules/gdnative/include/gdnative/string.h:88: warning: 'godot_char_string_get_data' violates the C++ One Definition Rule [-Wodr]
   88 | const char GDAPI *godot_char_string_get_data(const godot_char_string *p_cs);
      | 
modules/gdnative/gdnative/string.cpp:54:19: note: type mismatch in parameter 1
   54 | const char GDAPI *godot_char_string_get_data(const godot_char_string *p_cs) {
      |                   ^
modules/gdnative/gdnative/string.cpp:54:19: note: 'godot_char_string_get_data' was previously declared here
modules/gdnative/include/gdnative/string.h:238: warning: 'godot_string_parse_utf8_with_len' violates the C++ One Definition Rule [-Wodr]
  238 | godot_bool GDAPI godot_string_parse_utf8_with_len(godot_string *p_self, const char *p_utf8, godot_int p_len);
      | 
modules/gdnative/gdnative/string.cpp:961:18: note: type mismatch in parameter 1
  961 | godot_bool GDAPI godot_string_parse_utf8_with_len(godot_string *p_self, const char *p_utf8, godot_int p_len) {
      |                  ^
modules/gdnative/gdnative/string.cpp:961:18: note: 'godot_string_parse_utf8_with_len' was previously declared here
modules/gdnative/include/gdnative/string.h:89: warning: 'godot_char_string_destroy' violates the C++ One Definition Rule [-Wodr]
   89 | void GDAPI godot_char_string_destroy(godot_char_string *p_cs);
      | 
modules/gdnative/gdnative/string.cpp:60:12: note: type mismatch in parameter 1
   60 | void GDAPI godot_char_string_destroy(godot_char_string *p_cs) {
      |            ^
modules/gdnative/gdnative/string.cpp:60:12: note: 'godot_char_string_destroy' was previously declared here
modules/gdnative/include/gdnative/string.h:102: warning: 'godot_string_new_with_wide_chars' violates the C++ One Definition Rule [-Wodr]
  102 | void GDAPI godot_string_new_with_wide_chars(godot_string *r_dest, const wchar_t *p_contents);
      | 
modules/gdnative/gdnative/string.cpp:120:12: note: type mismatch in parameter 1
  120 | void GDAPI godot_string_new_with_wide_chars(godot_string *r_dest, const wchar_t *p_contents) {
      |            ^
modules/gdnative/gdnative/string.cpp:120:12: note: 'godot_string_new_with_wide_chars' was previously declared here
modules/gdnative/include/gdnative/string.h:108: warning: 'godot_string_new_with_wide_chars_and_len' violates the C++ One Definition Rule [-Wodr]
  108 | void GDAPI godot_string_new_with_wide_chars_and_len(godot_string *r_dest, const wchar_t *p_contents, const int p_size);
      | 
modules/gdnative/gdnative/string.cpp:157:12: note: type mismatch in parameter 1
  157 | void GDAPI godot_string_new_with_wide_chars_and_len(godot_string *r_dest, const wchar_t *p_contents, const int p_size) {
      |            ^
modules/gdnative/gdnative/string.cpp:157:12: note: 'godot_string_new_with_wide_chars_and_len' was previously declared here
modules/gdnative/include/gdnative/string.h:104: warning: 'godot_string_new_with_latin1_chars_and_len' violates the C++ One Definition Rule [-Wodr]
  104 | void GDAPI godot_string_new_with_latin1_chars_and_len(godot_string *r_dest, const char *p_contents, const int p_size);
      | 
modules/gdnative/gdnative/string.cpp:133:12: note: type mismatch in parameter 1
  133 | void GDAPI godot_string_new_with_latin1_chars_and_len(godot_string *r_dest, const char *p_contents, const int p_size) {
      |            ^
modules/gdnative/gdnative/string.cpp:133:12: note: 'godot_string_new_with_latin1_chars_and_len' was previously declared here
modules/gdnative/include/gdnative/string.h:134: warning: 'godot_string_count' violates the C++ One Definition Rule [-Wodr]
  134 | godot_int GDAPI godot_string_count(const godot_string *p_self, const godot_string *p_what, godot_int p_from, godot_int p_to);
      | 
modules/gdnative/gdnative/string.cpp:281:17: note: type mismatch in parameter 1
  281 | godot_int GDAPI godot_string_count(const godot_string *p_self, const godot_string *p_what, godot_int p_from, godot_int p_to) {
      |                 ^
modules/gdnative/gdnative/string.cpp:281:17: note: 'godot_string_count' was previously declared here
modules/gdnative/include/gdnative/string.h:135: warning: 'godot_string_countn' violates the C++ One Definition Rule [-Wodr]
  135 | godot_int GDAPI godot_string_countn(const godot_string *p_self, const godot_string *p_what, godot_int p_from, godot_int p_to);
      | 
modules/gdnative/gdnative/string.cpp:288:17: note: type mismatch in parameter 1
  288 | godot_int GDAPI godot_string_countn(const godot_string *p_self, const godot_string *p_what, godot_int p_from, godot_int p_to) {
      |                 ^
modules/gdnative/gdnative/string.cpp:288:17: note: 'godot_string_countn' was previously declared here
modules/gdnative/include/gdnative/string.h:218: warning: 'godot_string_to_lower' violates the C++ One Definition Rule [-Wodr]
  218 | godot_string GDAPI godot_string_to_lower(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:833:20: note: type mismatch in parameter 1
  833 | godot_string GDAPI godot_string_to_lower(const godot_string *p_self) {
      |                    ^
modules/gdnative/gdnative/string.cpp:833:20: note: 'godot_string_to_lower' was previously declared here
modules/gdnative/include/gdnative/string.h:297: warning: 'godot_string_lstrip' violates the C++ One Definition Rule [-Wodr]
  297 | godot_string GDAPI godot_string_lstrip(const godot_string *p_self, const godot_string *p_chars);
      | 
modules/gdnative/gdnative/string.cpp:1350: note: type mismatch in parameter 1
 1350 | godot_string GDAPI godot_string_lstrip(const godot_string *p_self, const godot_string *p_chars) {
      | 
modules/gdnative/gdnative/string.cpp:1350: note: 'godot_string_lstrip' was previously declared here
modules/gdnative/include/gdnative/string.h:99: warning: 'godot_string_new_with_utf8_chars' violates the C++ One Definition Rule [-Wodr]
   99 | void GDAPI godot_string_new_with_utf8_chars(godot_string *r_dest, const char *p_contents);
      | 
modules/gdnative/gdnative/string.cpp:102:12: note: type mismatch in parameter 1
  102 | void GDAPI godot_string_new_with_utf8_chars(godot_string *r_dest, const char *p_contents) {
      |            ^
modules/gdnative/gdnative/string.cpp:102:12: note: 'godot_string_new_with_utf8_chars' was previously declared here
modules/gdnative/include/gdnative/string.h:298: warning: 'godot_string_rstrip' violates the C++ One Definition Rule [-Wodr]
  298 | godot_string GDAPI godot_string_rstrip(const godot_string *p_self, const godot_string *p_chars);
      | 
modules/gdnative/gdnative/string.cpp:1360: note: type mismatch in parameter 1
 1360 | godot_string GDAPI godot_string_rstrip(const godot_string *p_self, const godot_string *p_chars) {
      | 
modules/gdnative/gdnative/string.cpp:1360: note: 'godot_string_rstrip' was previously declared here
modules/gdnative/include/gdnative/string.h:112: warning: 'godot_string_get_data' violates the C++ One Definition Rule [-Wodr]
  112 | const godot_char_type GDAPI *godot_string_get_data(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:180:30: note: type mismatch in parameter 1
  180 | const godot_char_type GDAPI *godot_string_get_data(const godot_string *p_self) {
      |                              ^
modules/gdnative/gdnative/string.cpp:180:30: note: 'godot_string_get_data' was previously declared here
modules/gdnative/include/gdnative/string.h:292: warning: 'godot_string_is_valid_ip_address' violates the C++ One Definition Rule [-Wodr]
  292 | godot_bool GDAPI godot_string_is_valid_ip_address(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1315: note: type mismatch in parameter 1
 1315 | godot_bool GDAPI godot_string_is_valid_ip_address(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1315: note: 'godot_string_is_valid_ip_address' was previously declared here
modules/gdnative/include/gdnative/string.h:154: warning: 'godot_string_match' violates the C++ One Definition Rule [-Wodr]
  154 | godot_bool GDAPI godot_string_match(const godot_string *p_self, const godot_string *p_wildcard);
      | 
modules/gdnative/gdnative/string.cpp:418:18: note: type mismatch in parameter 1
  418 | godot_bool GDAPI godot_string_match(const godot_string *p_self, const godot_string *p_wildcard) {
      |                  ^
modules/gdnative/gdnative/string.cpp:418:18: note: 'godot_string_match' was previously declared here
modules/gdnative/include/gdnative/string.h:155: warning: 'godot_string_matchn' violates the C++ One Definition Rule [-Wodr]
  155 | godot_bool GDAPI godot_string_matchn(const godot_string *p_self, const godot_string *p_wildcard);
      | 
modules/gdnative/gdnative/string.cpp:425:18: note: type mismatch in parameter 1
  425 | godot_bool GDAPI godot_string_matchn(const godot_string *p_self, const godot_string *p_wildcard) {
      |                  ^
modules/gdnative/gdnative/string.cpp:425:18: note: 'godot_string_matchn' was previously declared here
modules/gdnative/include/gdnative/string.h:150: warning: 'godot_string_is_subsequence_of' violates the C++ One Definition Rule [-Wodr]
  150 | godot_bool GDAPI godot_string_is_subsequence_of(const godot_string *p_self, const godot_string *p_string);
      | 
modules/gdnative/gdnative/string.cpp:387:18: note: type mismatch in parameter 1
  387 | godot_bool GDAPI godot_string_is_subsequence_of(const godot_string *p_self, const godot_string *p_string) {
      |                  ^
modules/gdnative/gdnative/string.cpp:387:18: note: 'godot_string_is_subsequence_of' was previously declared here
modules/gdnative/include/gdnative/string.h:151: warning: 'godot_string_is_subsequence_ofi' violates the C++ One Definition Rule [-Wodr]
  151 | godot_bool GDAPI godot_string_is_subsequence_ofi(const godot_string *p_self, const godot_string *p_string);
      | 
modules/gdnative/gdnative/string.cpp:394:18: note: type mismatch in parameter 1
  394 | godot_bool GDAPI godot_string_is_subsequence_ofi(const godot_string *p_self, const godot_string *p_string) {
      |                  ^
modules/gdnative/gdnative/string.cpp:394:18: note: 'godot_string_is_subsequence_ofi' was previously declared here
modules/gdnative/include/gdnative/string.h:133: warning: 'godot_string_ends_with_char_array' violates the C++ One Definition Rule [-Wodr]
  133 | godot_bool GDAPI godot_string_ends_with_char_array(const godot_string *p_self, const char *p_char_array);
      | 
modules/gdnative/gdnative/string.cpp:275:18: note: type mismatch in parameter 1
  275 | godot_bool GDAPI godot_string_ends_with_char_array(const godot_string *p_self, const char *p_char_array) {
      |                  ^
modules/gdnative/gdnative/string.cpp:275:18: note: 'godot_string_ends_with_char_array' was previously declared here
modules/gdnative/include/gdnative/string.h:132: warning: 'godot_string_ends_with' violates the C++ One Definition Rule [-Wodr]
  132 | godot_bool GDAPI godot_string_ends_with(const godot_string *p_self, const godot_string *p_string);
      | 
modules/gdnative/gdnative/string.cpp:268:18: note: type mismatch in parameter 1
  268 | godot_bool GDAPI godot_string_ends_with(const godot_string *p_self, const godot_string *p_string) {
      |                  ^
modules/gdnative/gdnative/string.cpp:268:18: note: 'godot_string_ends_with' was previously declared here
modules/gdnative/include/gdnative/string.h:129: warning: 'godot_string_begins_with_char_array' violates the C++ One Definition Rule [-Wodr]
  129 | godot_bool GDAPI godot_string_begins_with_char_array(const godot_string *p_self, const char *p_char_array);
      | 
modules/gdnative/gdnative/string.cpp:248:18: note: type mismatch in parameter 1
  248 | godot_bool GDAPI godot_string_begins_with_char_array(const godot_string *p_self, const char *p_char_array) {
      |                  ^
modules/gdnative/gdnative/string.cpp:248:18: note: 'godot_string_begins_with_char_array' was previously declared here
modules/gdnative/include/gdnative/string.h:128: warning: 'godot_string_begins_with' violates the C++ One Definition Rule [-Wodr]
  128 | godot_bool GDAPI godot_string_begins_with(const godot_string *p_self, const godot_string *p_string);
      | 
modules/gdnative/gdnative/string.cpp:241:18: note: type mismatch in parameter 1
  241 | godot_bool GDAPI godot_string_begins_with(const godot_string *p_self, const godot_string *p_string) {
      |                  ^
modules/gdnative/gdnative/string.cpp:241:18: note: 'godot_string_begins_with' was previously declared here
modules/gdnative/include/gdnative/string.h:177: warning: 'godot_string_to_float' violates the C++ One Definition Rule [-Wodr]
  177 | double GDAPI godot_string_to_float(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:604:14: note: type mismatch in parameter 1
  604 | double GDAPI godot_string_to_float(const godot_string *p_self) {
      |              ^
modules/gdnative/gdnative/string.cpp:604:14: note: 'godot_string_to_float' was previously declared here
modules/gdnative/include/gdnative/string.h:259: warning: 'godot_string_is_empty' violates the C++ One Definition Rule [-Wodr]
  259 | godot_bool godot_string_is_empty(const godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:1090: note: type mismatch in parameter 1
 1090 | godot_bool godot_string_is_empty(const godot_string *p_self) {
      | 
modules/gdnative/gdnative/string.cpp:1090: note: 'godot_string_is_empty' was previously declared here
modules/gdnative/include/gdnative/string.h:115: warning: 'godot_string_operator_less' violates the C++ One Definition Rule [-Wodr]
  115 | godot_bool GDAPI godot_string_operator_less(const godot_string *p_self, const godot_string *p_b);
      | 
modules/gdnative/gdnative/string.cpp:191:18: note: type mismatch in parameter 1
  191 | godot_bool GDAPI godot_string_operator_less(const godot_string *p_self, const godot_string *p_b) {
      |                  ^
modules/gdnative/gdnative/string.cpp:191:18: note: 'godot_string_operator_less' was previously declared here
modules/gdnative/include/gdnative/string.h:98: warning: 'godot_string_new_with_latin1_chars' violates the C++ One Definition Rule [-Wodr]
   98 | void GDAPI godot_string_new_with_latin1_chars(godot_string *r_dest, const char *p_contents);
      | 
modules/gdnative/gdnative/string.cpp:96:12: note: type mismatch in parameter 1
   96 | void GDAPI godot_string_new_with_latin1_chars(godot_string *r_dest, const char *p_contents) {
      |            ^
modules/gdnative/gdnative/string.cpp:96:12: note: 'godot_string_new_with_latin1_chars' was previously declared here
modules/gdnative/include/gdnative/string.h:114: warning: 'godot_string_operator_equal' violates the C++ One Definition Rule [-Wodr]
  114 | godot_bool GDAPI godot_string_operator_equal(const godot_string *p_self, const godot_string *p_b);
      | 
modules/gdnative/gdnative/string.cpp:185:18: note: type mismatch in parameter 1
  185 | godot_bool GDAPI godot_string_operator_equal(const godot_string *p_self, const godot_string *p_b) {
      |                  ^
modules/gdnative/gdnative/string.cpp:185:18: note: 'godot_string_operator_equal' was previously declared here
modules/gdnative/include/gdnative/string.h:300: warning: 'godot_string_destroy' violates the C++ One Definition Rule [-Wodr]
  300 | void GDAPI godot_string_destroy(godot_string *p_self);
      | 
modules/gdnative/gdnative/string.cpp:205:12: note: type mismatch in parameter 1
  205 | void GDAPI godot_string_destroy(godot_string *p_self) {
      |            ^
modules/gdnative/gdnative/string.cpp:205:12: note: 'godot_string_destroy' was previously declared here
scons: done building targets.

@akien-mga akien-mga self-assigned this Jan 14, 2021
@bruvzg
Copy link
Member

bruvzg commented Jan 14, 2021

Neither of these warnings should cause linking errors.

g++: fatal error: Killed signal terminated program lto1

This kind of crashes usually happen when LTO runs out of memory, try increasing swap size or decreasing thread number.

Test branch for fixing ICU warning: bruvzg@93d2a6d (works on macOS, will test it on Linux a bit later).

Not sure whatš better, suppress the warning or modify a definition in the ICU source. ICU defines data entry point as 'DataHeader' structure, but actual data is much bigger (it begins with the 'DataHeader' structure). Only the address of the entry point is used in ICU code.

@naithar
Copy link
Contributor

naithar commented Jan 14, 2021

This branch naithar@f91fde4 should be fixing C++ One Definition Rule warnings.

But it seems like the error causing compilation to fail might actually be caused by OOM: https://stackoverflow.com/questions/30887143/make-j-8-g-internal-compiler-error-killed-program-cc1plus, like @bruvzg already mentioned.

@Xartorx
Copy link
Contributor

Xartorx commented Jan 14, 2021

I also have the same problem with GCC (using this toolchain) on Windows 10, while compiling Mono version of editor, but crash includes a lot more Mono related errors, here's a crash log.
Command: scons -j16 use_mingw=yes use_lto=yes debug_symbols=no target=release_debug tools=yes module_mono_enabled=yes
Probably should open a new issue for that?

@bruvzg
Copy link
Member

bruvzg commented Jan 14, 2021

For the reference, I have done some testing using Ubuntu 20.10 VM, GCC 10.2.0, LTO builds with -j4:

  • with 4 GB of RAM and 2 GB swap → same LTO process crash.
  • with 8 GB of RAM and 2 GB swap → same LTO process crash.
  • with 12 GB of RAM and 2 GB swap → builds finishes successfully, but it's probably the absolute minimum amount of memory to do GCC LTO build.

Memory usage peaks at about 10.2 GB.

Update: Number of threads seems to be less relevant than I expected, it's still peaks at about 9.7 GB with -j2.

LLVM LTO seems to be much less memory hungry, last time I have checked, it was working 4 GB VM.

@godotengine godotengine deleted a comment Jan 14, 2021
@RevolNoom
Copy link
Author

RevolNoom commented Jan 14, 2021

I have been building with -j4 for 2 hours and my Dell has been frozen for almost all the linking time. The documentation said that memory usage could be intensive, about 3Gb. I was terrified when $top showed that LTO hogged all of my swap (800Mb) and, uh, before it froze, 7.6 / 7.8 Gb RAM. So that must have been the reason. I'll try creating more swap and build it tomorrow.
Oh and I have a final exam next morning so don't expect to hear back from me soon, ok? :>

@RevolNoom RevolNoom reopened this Jan 14, 2021
@Al-Shahrior
Copy link

I'm also getting the error on windows but only when i use this command
F:\Godot>scons -j4 target=release_debug use_lto=yes
Host
Windows 10 64bits
Compiler

  • GCC 10.2.0
  • GDB 10.1
  • LLVM/Clang/LLD/LLDB 11.0.0
  • MinGW-w64 8.0.0
  • GNU Binutils 2.35.1
  • GNU Make 4.3
  • PExports 0.47
  • dos2unix 7.4.2
  • Yasm 1.3.0
  • NASM 2.15.05
  • JWasm 2.12pre
    With the same compiler If i remove the target=release_debug use_lto=yes parameter the compile process done with out any error.
    image
    image

@Al-Shahrior
Copy link

Update

With scons -j4 target=release_debug this command compile done with out any error. Seems like there is a problem with use_lto=yes parameter.

@Al-Shahrior
Copy link

Al-Shahrior commented Jan 15, 2021

Here is the complete console output->
Link - its messy
Link

Now i'm 100% sure. I'm only getting error when I use use_lto=yes parameter.

@RevolNoom
Copy link
Author

The reason is because of memory shortage (RAM and Swapfile). I add 20Gb swapfile and scons finished building target. It still trigger the PluginConfig warnings, though. Quoted from @bruvzg:

For the reference, I have done some testing using Ubuntu 20.10 VM, GCC 10.2.0, LTO builds with -j4:

* with 4 GB of RAM and 2 GB swap → same LTO process crash.

* with 8 GB of RAM and 2 GB swap → same LTO process crash.

* with 12 GB of RAM and 2 GB swap → builds finishes successfully, but it's probably the absolute minimum amount of memory to do GCC LTO build.

Memory usage peaks at about 10.2 GB.

Update: Number of threads seems to be less relevant than I expected, it's still peaks at about 9.7 GB with -j2.

LLVM LTO seems to be much less memory hungry, last time I have checked, it was working 4 GB VM.

@bruvzg
Copy link
Member

bruvzg commented Jan 15, 2021

From the docs (https://docs.godotengine.org/en/latest/development/compiling/compiling_for_linuxbsd.html):

As link-time optimization is a memory-intensive process, this will require about 3 GB of available RAM while compiling.

I guess documentation for the 4.0 branch should be updated. 3.2 also use up to 6.4 GB not 3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants