如何强制gcc链接库中未引用的静态C++库

原文:How to force gcc to link unreferenced, static C++ objects from a library


翻译:

我使用一个可以组建为动态库也可以是静态库的一个C++库。这个库使用了工厂技术,程序开启的时候静态对象注册它们然后静态对象就会被创建。

只有动态库被使用的话,它工作良好。在使用静态版本的时候,在最终的程序中没有静态对象能获取到(因为它们没有直接引用),它们的函数也是不可用的。

有没有方法强制gcc在链接的时候包含所有的静态对象?

这个库的是开放源代码的,我可以修改它,如果有帮助的话。



Answers1:

你可以使用 -Wl,--whole-archive -lyourlib,看 ld命令的 manpage获取更多的信息。

任何在 -Wl,--whole-archive命令后面的静态库都会得到全部的包含,如果需要的话你可以再一次把它关闭,比如:-Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib。


Answers2:

一种hack帮助了我,尽管如此,仍需要包含下面的头文件:

// in the header with your class

struct RegistrationHelper {

    RegistrationHelper();

};

static RegistrationHelper Helper;

// in your cpp where you register your class

RegistrationHelper::RegistrationHelper() {}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过...
    小5筒阅读 5,561评论 0 3
  • 几乎在所有的linux发行版上,都存在着一定程度的不兼容问题,如何让自己的程序能尽量多的在发行版上运行?ldd大多...
    SeTriones阅读 2,964评论 0 1
  • 1. 介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含...
    逍遥_9353阅读 1,586评论 0 2
  • 本次主要是将C++的静态库链接到一个C的静态库里。编译环境是 mingw。 一、x86环境 1、C++的静态库编译...
    klince阅读 2,560评论 0 0
  • 北京 在这个快节奏城市, 真正感觉到情商比智商更重要。 我们的身边, 总会出现些情商超高的人, 他们能应对各种突发...
    番茄酱小猪阅读 420评论 0 0