I have the following problem :
- several object files a1.o, a2.o, a3.o, …
- an archive libxxxx.a.
The archive libxxxx.a only contains object files : b1.o, b2.o etc…
I would like to create a shared library (.so) from all the object files.
Problem : If I use :
g++ -shared libxxxx.a a1.o a2.o ... -o libnew.so
g++ does understand that I want to link with the static library libxxxx.a and does not include all the symbols of the archive.
A simple workaround is to first expand the archive using ar -x and then create the lib but it’s not really “elegant”.
There must be a simple command to force g++ to include the whole archive in the .so but I can’t find it.
Thanks for your help.
From
man ld:Example:
Note also that in your example you first put static library, then the object files – in this case the symbols used in the object files and defined in static library will not be found unless you use
--whole-archivelinker option. If you want to include just the needed symbols from the static library, you need to put itafterthe object files.