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.
The -l option tells GCC to link in the specified library.
Most Windows compilers support auto-linking, as does Clang, while GCC does not support auto-linking.
To create a static library, in general, we follow the 2-step method. First, we create object files for each source file using the 'gcc' command. Second, We will bundle all the object files using the 'ar' command.
In addition, you must add the - lm flag to the gcc compiler command in order to use math functions in your C code.
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
Use:
g++ -u <SYMBOL_NAME> ...
Note that -u is lowercase
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With