GCC использует расширения в именах файлов, чтобы определить, к какому типу они относятся и что с ними делать.Таким образом, тот факт, что вы перечислили некоторые имена, заканчивающиеся на «.c», говорит GCC о необходимости компилировать их в виде кода C.Если бы вы указали только имена, заканчивающиеся на «.o», GCC обработал бы их как объектные файлы и не скомпилировал бы их.
После компиляции GCC по умолчанию связывается, чтобы сделать исполняемый файл.Переключатель «-shared» указывает вместо этого создать общую библиотеку.
Чтобы компилировать только без связывания, вы можете использовать переключатель «-c» и удалить переключатель «-shared», а также удалить всеаргументов команды или переключателей, которые используются только для компоновки («-Wl, - export-dynamic» - один, и я не знаю, будет ли этот pkg-config генерировать какие-либо параметры ссылки).Также удалите или измените «-o lib.so», так как это задает имя, используемое для выходного файла, и это не то, что вы хотите для объектных файлов, которые получаются только в результате компиляции.
Только для ссылкибез компиляции вы бы просто перечислили объектные файлы вместо исходных файлов и удалили параметры, влияющие на компиляцию («-I / home / lib», «-fPIC» и любые, созданные pkg-config).