How to force gcc to link unreferenced, static C++

2019-01-14 02:09发布

I'm using a C++ library that can be built as either a shared or a static library. This library uses a factory technique, where static objects register themselves when the program starts and the static objects get created.

This works fine as long as the shared library is used. When the static version is used, none of the static objects get included into the final program (because they aren't referenced directly) and thus their functionality isn't available.

Is there a way to force gcc to include all static objects from a library when linking?

The library is Open Source and I could modify it, if that helps.

3条回答
神经病院院长
2楼-- · 2019-01-14 02:51

Use:

g++ -u <SYMBOL_NAME> ...

Note that -u is lowercase

查看更多
Viruses.
3楼-- · 2019-01-14 03:04

A kind of hack helped me out. Still have to include the header although.

// in the header with your class
struct RegistrationHelper {
    RegistrationHelper();
};

static RegistrationHelper Helper;

// in your cpp where you register your class
RegistrationHelper::RegistrationHelper() {}
查看更多
闹够了就滚
4楼-- · 2019-01-14 03:05

You can use -Wl,--whole-archive -lyourlib , see the manpage for ld for more info.

Any static libraries mentioned after -Wl,--whole-archive on the command line gets fully included, you can turn this off again too if you need to , as in e.g. -Wl,--whole-archive -lyourlib -Wl,--no-whole-archive -lotherlib

查看更多
登录 后发表回答