gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:31:46 26 4
gpt4 key购买 nike

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

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

我以类似于此答案的方式解决了这个问题: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); 永远不会被调用。

我有一个复杂的加载系统,允许脚本使用依赖于此行为的 native C++ 类。有没有办法在加载库时强制执行 Foo.cpp 中的代码?


编辑:看来我的问题与the one about static linking in Visual Studio直接相关.看来我自己的图书馆也有同样的问题。我注意到图书馆中的一些类(class)已注册。而且它们只是将它们的 .h 文件包含在我的项目中的那些。

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

最佳答案

使用-all_load 链接器选项加载静态库的所有成员。或者对于特定的库,使用 -force_load path_to_archive。

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

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

关于C++ 在加载静态库时执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com