Параметр компоновщика --whole-archive
должен сделать это. Вы бы использовали его, например,
gcc -o libmyshared.so foo.o -lanothersharedlib -Wl,--whole-archive -lmystaticlib
Что вы испытываете, так это то, что по умолчанию компоновщик будет искать символы в статическом архиве, который необходим для создаваемого вами двоичного файла, и, если он нужен, он будет включать в себя весь .o, в котором находится символ. Если вашей общей библиотеке не нужны никакие символы, они не будут включены в вашу общую библиотеку.
Помните, что код, который становится общей библиотекой, должен быть скомпилирован со специальными параметрами, такими как -fpic
, так как вы включаете статическую библиотеку в свою общую библиотеку, статическая библиотека должна быть скомпилирована с теми же параметрами.