-
Notifications
You must be signed in to change notification settings - Fork 796
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
BehaviorLoaderImplement 依赖于静态变量的初始化顺序 #13
Comments
这个静态变量初始化时机没有问题,因为BehaviorLoaderImplement肯定在AgentMeta::checkSignature()方法被调用前就初始化好了。 |
我用 gdb 断点调试了一下,第一次调用 checkSignature 的时候,signature 尚未被赋值,仍然是 0,并且 BehaviorLoaderImplement 构造器的构造器并没有被调用。 可以这样重现:
|
这种情况,需要在你游戏初始化的地方调用InitBehaviorLoader(), 这两个接口声明在meta.h中,实现在导出的behaviac_agent_meta.cpp,不用自己添加任何代码,直接调用这2个接口行了 |
Ok, 这个做法是可以的。希望这个可以加入文档以及教程中,让新手更容易上手。 |
好,我先放在bbs问题里面去了 |
确实 我是作为 .lib 来使用 behaviac_generated , |
您好!我是吴莫海!您给我的邮件我会尽快给您回复。谢谢!
|
在集成 c++ 生成的代码时,我们先将其编译成 .a 静态库,然后在 link 阶段将其集成进服务器中。但是执行时会报错:
The types/internal/behaviac_agent_meta.cpp should be exported from the behaviac designer, and then integrated into your project!
这个检查是在 src/common/meta.cpp:806 进行的
if (signature != (long long)AgentMeta::GetTotalSignature())
GetTotalSignature() 依赖于 BehaviorLoaderImplement 的初始化,但是 BehaviorLoaderImplement 是作为静态变量初始化的。这样一来,它的初始化就依赖于 linkder 的 Link 顺序和编译选项。这在使用的时候就会造成许多麻烦。
这个问题是否可以打个补丁修复呢。
The text was updated successfully, but these errors were encountered: