gpt4 book ai didi

c++ - 停止共享库链接以删除未使用的类

转载 作者:行者123 更新时间:2023-12-01 14:54:22 24 4
gpt4 key购买 nike

我发现了与消除死代码相反的问题的很多问题,但是我找不到答案:

给定一个类层次结构,如:

BaseView
+- Base2DView
+- Concrete2DView
+- Specialised2DView

我将所有文件链接到 view_classes.a中,然后添加实例化 Concrete2DView并创建 view_renderer.so的代码。接下来,我创建另一个库 specialised_view_renderer.so,它实例化 Specialised2DView并将 view_renderer.so列为依赖项。

但是,生成 view_renderer.so的过程已将 Specialised2DView.cpp.o文件消除为未使用的代码,因为当我使用 nm view_renderer.so时,什么都没有出现。

我知道,链接 view_classes.a或将 Specialised2DView.cpp移至 specialised_view_renderer.so项目都可以解决此问题,但这是传统的第三方代码,我可能不应该过多地修改。

因此,在构建 Specialised2DView.cpp.o时,是否有一种简单的方法可以将 view_renderer.so或其中的类标记为不消除?如果有标准 cmake target_link_libraries()行的选项,则加分。

最佳答案

So, is there an easy way to mark Specialised2DView.cpp.o or the class within as not to be eliminated when building the view_renderer.so?



是:
g++ -shared -o view_renderer.so ... \
-Wl,--whole-archive view_classes.a -Wl,--no-whole-archive

要了解为什么会发生这种情况以及解决方案为何起作用,您需要了解链接器用来选择要包含在链接中的对象的规则。 here是一个很好的描述。

关于c++ - 停止共享库链接以删除未使用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58988044/

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