Open samdze opened 2 years ago
@Calinou Any plans to address this or workarounds? This effectively prevents the use of Object IDs in GDNative projects. I understand GDExtension is the current focus, but this strikes me as important for projects targeting Godot 3.
Edit: Workaround per this comment:
godot::Object *obj = godot::detail::get_wrapper<Object>(godot::core_1_2_api->godot_instance_from_id(id));
To first ensure the ID is valid, the following can be used.
godot::Object *obj = godot::core_1_2_api->godot_instance_from_id(id) == nullptr ? nullptr : godot::detail::get_wrapper<Object>(godot::core_1_2_api->godot_instance_from_id(id))
Godot version
3.3.3 stable
System information
Windows 10, Visual Studio Code
Issue description
Whenever I try to use the
godot_instance_from_id
function from the GDNative API, the linker is unable to find its external symbol reference, causing the build process to fail.The function is therefore not really available at the moment.
Steps to reproduce
method
method of the SimpleClass class:This is the SConstruct file I use to build the project, nothing special.
``` #!python import os, subprocess opts = Variables([], ARGUMENTS) # Gets the standard flags CC, CCX, etc. env = DefaultEnvironment() # Define our options opts.Add(EnumVariable('target', "Compilation target", 'debug', ['d', 'debug', 'r', 'release'])) opts.Add(EnumVariable('platform', "Compilation platform", '', ['', 'windows', 'x11', 'linux', 'macos'])) opts.Add(EnumVariable('p', "Compilation target, alias for 'platform'", '', ['', 'windows', 'x11', 'linux', 'macos'])) opts.Add(EnumVariable('macos_arch', "Target architecture for the macOS platform", 'universal', ['universal', 'x86_64', 'arm64'])) opts.Add(BoolVariable('use_llvm', "Use the LLVM / Clang compiler", 'no')) opts.Add(PathVariable('target_path', 'The path where the lib is installed.', 'bin/')) opts.Add(PathVariable('target_name', 'The library name.', 'bullets', PathVariable.PathAccept)) # Local dependency paths, adapt them to your setup godot_headers_path = "godot-cpp/godot-headers/" cpp_bindings_path = "godot-cpp/" cpp_library = "libgodot-cpp" # only support 64 at this time.. bits = 64 # Updates the environment with the option variables. opts.Update(env) # Process some arguments if env['use_llvm']: env['CC'] = 'clang' env['CXX'] = 'clang++' if env['p'] != '': env['platform'] = env['p'] if env['platform'] == '': print("No valid target platform selected.") quit(); # Check our platform specifics if env['platform'] == "macos": env['target_path'] += 'macos' cpp_library += '.osx' if env['macos_arch'] == 'universal': env['target_path'] += '/' env.Append(LINKFLAGS=["-arch", "x86_64", "-arch", "arm64"]) env.Append(CCFLAGS=["-arch", "x86_64", "-arch", "arm64"]) else: env['target_path'] += env['macos_arch'] + '/' env.Append(CCFLAGS = ['-arch', env['macos_arch']]) env.Append(LINKFLAGS = ['-arch', env['macos_arch']]) if env['target'] in ('debug', 'd'): env.Append(CCFLAGS = ['-g','-O2', '-std=c++17']) else: env.Append(CCFLAGS = ['-g','-O3', '-std=c++17']) #env.Append(CCFLAGS=['-std=c++14']) elif env['platform'] in ('x11', 'linux'): env['target_path'] += 'x11/' cpp_library += '.linux' if env['target'] in ('debug', 'd'): env.Append(CCFLAGS = ['-fPIC', '-g3','-Og', '-std=c++17']) else: env.Append(CCFLAGS = ['-fPIC', '-g','-O3', '-std=c++17']) elif env['platform'] == "windows": env['target_path'] += 'win64/' cpp_library += '.windows' # This makes sure to keep the session environment variables on windows, # that way you can run scons in a vs 2017 prompt and it will find all the required tools env.Append(ENV = os.environ) env.Append(CCFLAGS = ['-DWIN32', '-D_WIN32', '-D_WINDOWS', '-W3', '-GR', '-D_CRT_SECURE_NO_WARNINGS']) if env['target'] in ('debug', 'd'): env.Append(CCFLAGS = ['-EHsc', '-D_DEBUG', '-MDd']) env['PDB'] = env['target_path'] + env['target_name'] + '.pdb' else: env.Append(CCFLAGS = ['-O2', '-EHsc', '-DNDEBUG', '-MD']) if env['target'] in ('debug', 'd'): cpp_library += '.debug' else: cpp_library += '.release' cpp_library += '.' + str(bits) # make sure our binding library is properly includes env.Append(CPPPATH=['.', godot_headers_path, cpp_bindings_path + 'include/', cpp_bindings_path + 'include/core/', cpp_bindings_path + 'include/gen/']) env.Append(LIBPATH=[cpp_bindings_path + 'bin/']) env.Append(LIBS=[cpp_library]) # tweak this if you want to use different folders, or more folders, to store your source code in. env.Append(CPPPATH=['src/']) sources = Glob('src/*.cpp') library = env.SharedLibrary(target=env['target_path'] + env['target_name'] , source=sources) Default(library) # Generates help for the -h scons option. Help(opts.GenerateHelpText(env)) ```Minimal reproduction project
No response