Если вы хотите, чтобы subroutine1
из libB.so
вызывалось, тогда правильный порядок ссылок будет -lB -lA
(для Linux и большинства других реализаций общей библиотеки UNIX).
есть инструментчто я могу использовать для проверки исполняемого файла.exe, чтобы увидеть, какая версия подпрограммы1 () будет вызываться во время выполнения
Нет: эта информация обычно не записывается в исполняемый файл.Правило таково: какая бы общая библиотека ни указала, subroutine1
первым будет тот, который будет использоваться.
Например, если вы связываетесь с -lC -lB -lA
, а во время соединения libC.so
не делает , не определяют subroutine1
, но позже вы перестраиваете libC.so
( без повторного связывания исполняемого файла), так что это произойдет, тогда будет вызван subroutine1
из libC.so
.
Однакообратите внимание, что есть осложнения.Например, libA.so
может быть связано с -Bsymbolic
, что приведет к тому, что все вызовы на subroutine1
из libA.so
будут привязаны к subroutine1
внутри libA.so
.