gpt4 book ai didi

c++ - 库的目标文件中包含未明确引用但可通过工厂获得的类在链接时被跳过

转载 作者:行者123 更新时间:2023-12-03 06:54:56 25 4
gpt4 key购买 nike

我有几十个类是泛型类的子类。根据我的程序收到的消息,它将通过工厂实例化这些子类的对象。按照通常的 C++ 编程风格,每个子类都在一个文件中。每个这样的文件还包括 Type 类模板的 1 行实例化,该模板将子类作为模板参数,将类的字符串名称作为构造函数参数,并在工厂中注册自己。当要求指定类型的对象时,工厂可以检查注册的 Type 并能够创建任何指定类型的对象。

最终结果是在收到消息时无需创建任何可用的子类主列表。在最坏的情况下,这会消除一项添加类型的任务,并避免任何可能的合并冲突。

好的:如果所有目标文件都在链接时作为对象包含在内,它就可以正常工作。如果它们都放在一个动态库 中,它又可以正常工作。然而,如果它们都放在一个静态库中,那么链接器会“有用地”指出这些文件中没有引用任何符号,因此会完全删除目标文件。

毫不奇怪,我从 90 年代初期就知道了。

但是否有任何现代 C++ 或链接器魔术可以让链接器简单地将所有目标文件留在生成的二进制文件中?

(提示:该文件具有在程序启动时运行的代码——Type 类的构造函数,它们向工厂注册了自己——应该足以让编译器离开他们就位,你不觉得吗?)

最佳答案

您似乎是在 ld(1) 的手册页中寻找此选项:

   --whole-archive
For each archive mentioned on the command line after the
--whole-archive option, include every object file in the archive in
the link, rather than searching the archive for the required object
files.

该段的其余部分指出,这通常在创建共享库时使用,但不限于该用例。下一段提到了您需要了解的具体细节,因此我将建议您参阅手册页以获取更多信息。

关于c++ - 库的目标文件中包含未明确引用但可通过工厂获得的类在链接时被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64101703/

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