如何强制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() {}

你可能感兴趣的:(如何强制gcc链接库中未引用的静态C++库)