Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在加载静态库时执行函数_C++_Ios_Static Libraries - Fatal编程技术网

C++ C++;在加载静态库时执行函数

C++ C++;在加载静态库时执行函数,c++,ios,static-libraries,C++,Ios,Static Libraries,我需要在加载代码时注册类。我实现了一个解决方案,只要代码在应用程序中编译就可以了 但是,当代码由静态库提供时,它根本不起作用 我以类似于以下答案的方式解决了这个问题: 目前我有一些类似于: #define REGISTER(className)\ static const int __classDescriptor##className = MyRegister(#className, className::GetAllocator()); 使用时,它看起来像: //Foo.cpp REGI

我需要在加载代码时注册类。我实现了一个解决方案,只要代码在应用程序中编译就可以了

但是,当代码由静态库提供时,它根本不起作用

我以类似于以下答案的方式解决了这个问题:

目前我有一些类似于:

#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中的代码


编辑:我的问题似乎与我的工作直接相关。看来我自己的图书馆也有同样的问题。我注意到图书馆的一些课程已经注册了。他们是唯一在我的项目中包含
.h
文件的人


那么,有没有一种方法可以在不链接到
.h
文件的情况下执行库中的代码?

在调用依赖于我的类描述符的任何其他代码之前,初始化我的类描述符的唯一方法是初始化库

我添加了一个函数
MyLibraryInit()
,它在每个
\uuuu类描述符##类名称
上调用一个函数,以强制初始化每个描述符


不幸的是,这似乎是我能找到的最优雅的方法。

使用-all\u load linker选项加载静态库的所有成员。或者对于特定的库,使用-force_load path_to_archive

在Xcode中,您需要在可执行文件(而不是静态库)的“其他链接器标志”下添加这些选项


这解决了我的静态初始化函数的问题。

REGISTER(Foo)
永远不会被调用,它是一个宏…@LuchianGrigore:static const int\uu classDescriptor。。。通过寄存器(Foo)调用。这就是我需要的,也是问题的重点。我必须做一个新的项目来测试这一点。