В чем разница между .so и .a файлами?
Я пытаюсь скомпилировать стороннюю библиотеку (в linux) и видеть, что она генерирует файлы libsomething.a У меня есть другие мои библиотеки, которые являются .so файлом
Но кажется, что даже .a является общей библиотекой и может использоваться так же, как и .so lib
Так есть ли разница между этими двумя? или они одинаковы с другими соглашениями об именах.
Ответы
Ответ 1
Но кажется, что даже .a является общей библиотекой
Нет, это статическая библиотека.
и может использоваться так же, как и .so lib
Если вы имеете в виду ссылку на него, то да. Но вы не можете dlopen() файл .a, который вы можете сделать с .so файлом.
Вы всегда можете попросить нашего старого друга дядя G ответить на ваши вопросы.
Ответ 2
Файл A .a
является статической библиотекой, а файл .so
является динамической библиотекой общего объекта, подобной DLL
в Windows.
A .a
может быть включен как часть программы во время компиляции, а .so
может импортироваться, а загрузка программы.
Ответ 3
Когда вы ссылаетесь на *.a
, код из библиотеки включается в сам исполняемый файл, и исполняемый файл может быть запущен без необходимости наличия файла *.a
. Когда вы ссылаетесь на *.so
, это не так, и файл *.so
должен присутствовать во время выполнения.