【发布时间】:2012-09-26 13:10:10
【问题描述】:
我需要在加载代码时注册类。我实现了一个解决方案,只要代码在应用程序中编译,它就可以很好地工作。
但是当代码由静态库提供时,它根本不起作用。
我以类似于以下答案的方式解决了这个问题:https://stackoverflow.com/a/729028/171711。
目前我有类似的东西:
#define REGISTER(className)\
static const int __classDescriptor##className = MyRegister(#className, className::GetAllocator());
使用时的样子:
//Foo.cpp
REGISTER(Foo);
Foo::Foo()
{
...
}
我在日志中有:
registered class:Foo
但是当我创建一个静态库并且库提供了 Foo 时,问题是永远不会调用 REGISTER(Foo);。
我有一个复杂的加载系统,允许脚本使用依赖于此行为的本机 C++ 类。有没有办法在加载库时强制执行 Foo.cpp 中的代码?
编辑:看来我的问题与the one about static linking in Visual Studio 直接相关。看来我自己的库也有同样的问题。我注意到库中的一些类已注册。他们只是将.h 文件包含在我的项目中的人。
那么有没有办法在库中执行代码而不链接到.h 文件?
【问题讨论】:
-
REGISTER(Foo)永远不会被调用,它是一个宏...... -
@LuchianGrigore: static const int __classDescriptor... 通过 REGISTER(Foo) 调用。这就是我需要的,也是问题试图关注的。
标签: c++ ios static-libraries