我们先来看看导致问题出现的罪魁祸首——classes/rich_text_label.hpp 里面的 push_list()
godot-cpp 4.0
void push_list(
int32_t level,
RichTextLabel::ListType type,
bool capitalize
);
godot-cpp 4.1
void push_list(
int32_t level,
RichTextLabel::ListType type,
bool capitalize,
const String &bullet = "•"
);
可以看到godot-cpp 4.1的 push_list() 相比 godot-cpp 4.0 增加了一个参数,而就是因为这个参数导致编译失败。因为这个 “•” u2022 bullet点号 在GBK编码中并不存在。所以编译时我们要指定编码格式为 utf-8
如果使用 SCons,则需要在合适位置添加以下代码
env.Append(CXXFLAGS='/source-charset:utf-8')
如果使用 CMake,则添加下面代码
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
另外4.1的.gdextension也有相应的变化:
[configuration]
entry_symbol = "example_library_init"
compatibility_minimum = 4.1
[libraries]
macos.debug = "res://bin/libgdexample.macos.template_debug.framework"
macos.release = "res://bin/libgdexample.macos.template_release.framework"
windows.debug.x86_32 = "res://bin/libgdexample.windows.template_debug.x86_32.dll"
windows.release.x86_32 = "res://bin/libgdexample.windows.template_release.x86_32.dll"
windows.debug.x86_64 = "res://bin/libgdexample.windows.template_debug.x86_64.dll"
windows.release.x86_64 = "res://bin/libgdexample.windows.template_release.x86_64.dll"
linux.debug.x86_64 = "res://bin/libgdexample.linux.template_debug.x86_64.so"
linux.release.x86_64 = "res://bin/libgdexample.linux.template_release.x86_64.so"
linux.debug.arm64 = "res://bin/libgdexample.linux.template_debug.arm64.so"
linux.release.arm64 = "res://bin/libgdexample.linux.template_release.arm64.so"
linux.debug.rv64 = "res://bin/libgdexample.linux.template_debug.rv64.so"
linux.release.rv64 = "res://bin/libgdexample.linux.template_release.rv64.so"
android.debug.x86_64 = "res://bin/libgdexample.android.template_debug.x86_64.so"
android.release.x86_64 = "res://bin/libgdexample.android.template_release.x86_64.so"
android.debug.arm64 = "res://bin/libgdexample.android.template_debug.arm64.so"
android.release.arm64 = "res://bin/libgdexample.android.template_release.arm64.so"