в чем разница между .a и .so файлом?

<p>насколько я понимаю, это библиотеки, но в чем разница между ними?</p>

<p>a <code>.a</code> файл является статической библиотекой, а <code>.so</code> файл - это динамическая библиотека общего объекта, похожая на dll в windows. есть некоторая подробная информация о различиях между ними в <strong> <a href="http://www.yolinux.com/tutorials/libraryarchives-staticanddynamic.html">эта страница</a> </strong>.</p>

<p>как следствие, файл .a является архивом "ar". в отличие от архива tar, он хранит .o или объектные файлы, что позволяет извлекать их из архива и связывать в программе, среди прочего. вы можете использовать ar для хранения других файлов, если хотите.</p><p>вы можете получить список членов ar-файла с параметром -t, например:</p><pre><code>ar -t /usr/lib/libc.a </code></pre><p>файл .so является файлом "общего объекта" и содержит гораздо больше информации, доступной для компоновщика, чтобы участники могли быть связаны с загружаемой программой как можно быстрее.</p><p>например, попробуйте:</p><pre><code>objdump -t /lib/libc-2.11.1.so </code></pre><p>(или любую другую версию libc.so, которая находится в вашем каталоге/lib.) обратите внимание, что файл .so также может просто содержать сценарий компоновщика, указывающий ему найти файл в другом месте, или использовать что-то еще.</p><p>интересно, что файл .so также может быть полноценной программой. например, попробуйте запустить <em>/ lib/libc.so.6</em>. (к сожалению, эта последняя часть, похоже, не работает на более современных системах. не то, чтобы это была большая потеря.)</p>