Я бы выбрал вариант 1 (хотя вариант 2 работает, я бы не стал его рекомендовать, поскольку всем, кто связывает exe-файл, необходимо запомнить все необходимые транзитивные библиотеки).
Однако этот совет толькодля создания файла so
, как вы делаете выше.so
файлы (общие объекты) являются «интеллектуальными» библиотеками, очень похожими на исполняемые файлы, за исключением того, что у них нет основной.Файлы so
могут ссылаться на другие библиотеки (например, исполняемые файлы), и когда исполняемый файл ссылается на файл so
, он автоматически рекурсивно включает в себя зависимости файла so
.
Следовательно, *Файл 1010 *, который вы создаете, должен быть связан со всеми его зависимостями.
«тупая» библиотека, такая как файл a
(статическая библиотека), - это отдельная история;затем вам нужно выполнить все ссылки в исполняемом файле (вариант 2).
Я рекомендую использовать инструмент ldd
, чтобы исследовать зависимости как исполняемого файла, так и файла so
, чтобы увидеть, как это работает.
Для реального примера того, почему вариант 1 лучше, попробуйте ldd /usr/lib/libpng.so
.Обратите внимание, что libpng связан с libz.Если это не так, любой, кто когда-либо ссылается на libpng, также должен будет ссылаться на libz.На самом деле вы можете ссылаться на libpng, даже не зная, что libz задействован.