У меня возник вопрос по поводу разделяемых и статических библиотек. Итак, позвольте мне рассказать вам, что я сделал, я создал статическую библиотеку, а также разделяемую библиотеку, используя команды gcc, а размер libarith.a составляет 6 КБ и размер libarith.so - 18 КБ. Оба библиотеки содержат одинаковые функции.
Я использовал одну простую функцию (скажем, add (a, b)) в своем файле make.c и связал статическую библиотеку с помощью этой команды gcc,
gcc -L/cygdrive/c/cpros make.c -larith.a # used a static library
размер исполняемого файла составляет 16,1 КБ.
Затем я использовал ту же функцию (то же самое add (a, b)) в моем файле make.c, но на этот раз с использованием разделяемой библиотеки, как эти.
gcc make.c /cygdrive/c/cpros/libarith.so #used a shared library
к сожалению, размер исполняемого файла составляет 12,1 КБ. Я удивляюсь, как? потому что размер libarith.so составляет 18 КБ по сравнению с libarith.a, который составляет всего 6 КБ. Но в конце исполняемый файл, сгенерированный с использованием общей библиотеки, меньше по сравнению со статической библиотекой.
Может кто-нибудь дать мне вескую причину для этого? Если разделяемые библиотеки занимают меньше памяти, то почему бы нам не использовать все время совместно используемые библиотеки. Пожалуйста, дайте мне знать, когда мы используем разделяемые библиотеки, а когда - статические.
Да, когда я создавал разделяемую библиотеку с использованием -fPIC, она давала мне код, предупреждающий о позиции предупреждения. Что на самом деле означает это предупреждение?