写在开始
最近在尝试使用Godot这个游戏引擎,但是鉴于GDScript的性能过于弱鸡,所以我打算起步就使用GDNative用C/C++来编写主程序。
第一个坑:编译器
使用官方的教程来测试的时候,要使用cl
进行编译
cl /Fosimple.obj /c simple.c /nologo -EHsc -DNDEBUG /MD /I. /I..\godot_headers
link /nologo /dll /out:..\simple\bin\libsimple.dll /implib:..\simple\bin\libsimple.lib simple.obj
最开始应该是直接在powershell里面找不到这个程序,然后出于习惯,打开了Developer Powershell for VS 2019
。
事实证明,能编译,也能链接,但是到了下面的步骤之后就发现问题了,运行的时候会出来这么一个错误:
Error 193: %1 is not a valid Win32 application.
一开始因为我是中文系统在里面报了个中文的乱码错误,后来搜了一下之后最吻合的大概是这个意思。
搜到的结果大概是因为编译器用了32位的,然后把它当作64位的库导入了godot。
我看了一下我的配置,godot里配置的是64位的
一开始没往别处想,直到最后我在开发者工具里打了一下cl之后发现:
这玩意果然是个x86的编译器,一瞬无语。
后来找到了一个叫x64 Native Tools Command Prompt for VS 2019
的一个程序,这个的内置环境变量里的cl就是64位的了,用这个就解决了。
第二个坑:类名大小写
教程给的官方案例里的类名是全大写的,大概是这样
[gd_resource type="NativeScript" load_steps=2 format=2]
[ext_resource path="res://bin/simple.gdnlib" type="GDNativeLibrary" id=1]
[resource]
resource_name = "SIMPLE"
class_name = "SIMPLE"
library = ExtResource( 1 )
_sections_unfolded = [ "Resource" ]
但是class_name
实际上应该是首字母大写的,改成这样就可以用了:
[gd_resource type="NativeScript" load_steps=2 format=2]
[ext_resource path="res://bin/simple.gdnlib" type="GDNativeLibrary" id=1]
[resource]
resource_name = "SIMPLE"
class_name = "Simple"
library = ExtResource( 1 )
_sections_unfolded = [ "Resource" ]
写在最后
也可能是我对godot不熟悉,或者说C/C++的编译相关的东西不熟悉,上来就踩了这么两个奇怪的坑,不过还算是好解决了吧,虽然解决过程中很令人气愤就是了。