Repository: godot
Issue: GDNative unresolved external symbol `godot_instance_from_id`
Labels: bug,topic:gdextension

### 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.

```
C:\Users\Sam\Desktop\unresolved_symbol>scons platform=windows
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
cl /Fosrc\init.obj /c src\init.cpp /TP /nologo -DWIN32 -D_WIN32 -D_WINDOWS -W3 -GR -D_CRT_SECURE_NO_WARNINGS -EHsc -D_DEBUG -MDd /I. /Igodot-cpp\godot-headers 
/Igodot-cpp\include /Igodot-cpp\include\core /Igodot-cpp\include\gen /Isrc /Z7
init.cpp
link /nologo /dll /out:bin\win64\bullets.dll /implib:bin\win64\bullets.lib /LIBPATH:godot-cpp\bin libgodot-cpp.windows.debug.64.lib /PDB:bin\win64\bullets.pdb 
/DEBUG src\init.obj
   Creazione della libreria bin\win64\bullets.lib e dell'oggetto bin\win64\bullets.exp
init.obj : error LNK2019: riferimento al simbolo esterno godot_instance_from_id non risolto nella funzione "public: class godot::Variant __cdecl SimpleClass::method(class godot::Variant)" (?method@SimpleClass@@QEAA?AVVariant@godot@@V23@@Z)
bin\win64\bullets.dll : fatal error LNK1120: 1 esterni non risolti
scons: *** [bin\win64\bullets.dll] Error 1120
scons: building terminated because of errors.
```

The function is therefore not really available at the moment.

### Steps to reproduce

1. Create a simple GDNative project following the official README (https://github.com/godotengine/godot-cpp/tree/3.3)
2. Compile all the needed libraries and dependencies and make sure it succeeds.
3. Now add this snippet inside the `method` method of the SimpleClass class:
```
if(godot_instance_from_id(0) != nullptr) {
  return "";
}
```
4. Compile again, the process fails.

<details>
<summary>This is the SConstruct file I use to build the project, nothing special.</summary>

```
#!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))
```
</details>

### Minimal reproduction project

_No response_