Как правило, нет , оно не переносимо в том смысле, что скомпилированная библиотека может быть связана в любой другой системе. Скомпилированная библиотека должна быть совместима с целевой архитектурой, ОС, системой компилятора, чтобы назвать некоторые из них.
Но у вас есть другой выбор, заключенный из вашего комментария: кажется, что вы также предоставляете некоторыесценарий оболочки или make-файл для сборки программ.
Поскольку библиотека состоит из "просто" набора скомпилированных модулей перевода, прежде чем некоторые из них будут связаны с программами, вы можете взять набор источников этих модулей переводаи скомпилируйте их с источниками каждой программы, где это уместно.
В качестве примера, скажем, у вас есть 2 функции (каждая в своем собственном исходном файле), которые вы используете в разных комбинациях в 3 программах. «prg1» использует func1()
, «prg2» использует func2()
, а «prg3» использует оба.
Это могут быть команды для сборки программ с (статической) библиотекой:
gcc -c func1.c -o func1.o
gcc -c func2.c -o func2.o
ar -r lib.a func1.o func2.o
gcc prg1.c lib.a -o prg1
gcc prg2.c lib.a -o prg2
gcc prg3.c lib.a -o prg3
Вместо библиотеки вы напрямую компилируете исходные коды программ:
gcc prg1.c func1.c -o prg1
gcc prg2.c func2.c -o prg2
gcc prg3.c func1.c func2.c -o prg3
Результаты такие же, по крайней мере, если вы статически связывались с библиотекой.
Но даже с разделяемой (динамической) библиотекой подход будет таким же. Совместно используемые библиотеки «только» сохраняют часть оперативной памяти, если несколько программ, использующих их, запускаются одновременно . Если одновременно выполняется только одна программа, динамически связанной программе может потребоваться больше оперативной памяти и она загружается медленнее.