AFAIK Невозможно связать библиотеку .a и файл .o, чтобы создать другой промежуточный файл, т.е. файл, который не связан как файл .o.
Решение, предоставленное Бертоном Самоградом, выглядит очень хорошим вариантом; но если вам не разрешено изменять файл библиотеки .a, вы можете следовать предложению, предоставленному DarkDust, если вы строите с использованием make
.
Однако вы можете создать файл .so общей библиотеки из файла библиотеки .a и файла .o (я думаю, это то, что Майкл Барр пытается передать). Вы можете использовать только разделяемую библиотеку вместо обоих .a & .o файл для генерации вашего исполняемого файла следующим образом:
Создать общую библиотеку gcc io.o libdscud-6.02.a -shared -o io.so
(обратите внимание, что порядок файлов, передаваемых для связывания, важен)
Создайте свой источник с gcc io.so -o test test.c
. Для выполнения вашего исполняемого пути io.so должен находиться в пути поиска загрузчика (ld), т. Е. LD_LIBRARY_PATH.
Правильный способ работы с разделяемым объектом - создать libio.so
, который является соглашением об именах и , а не io.so
, и построить код как gcc test.c -o test -L<path_to_libio.so> -lio
, а путь к libio.so
должен выглядеть в ld путь для выполнения выходного исполняемого файла.
Я знаю, что создание разделяемой библиотеки только для того, чтобы избежать добавления другого файла для компиляции, кажется, не то, что вы хотите сделать ... но это просто для вашей информации на случай, если вы еще не знали:)