原文: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() {}
网友评论