Почему символы не конфликтуют, когда содержат одну и ту же статическую библиотеку? - PullRequest
0 голосов
/ 28 мая 2018

Статическое имя библиотеки libstatic1.a, другая статическая библиотека с именем libstatic2.a тестовое приложение с именем testapp

libstatic1.a имеет метод testcmethds

libstatic2.a связанныйlibstatic1.a и вызванный testcmethds в методе samecalltest

testapp, связанный libstatic1.a и libstatic2.a

testapp, успешно завершится и будет работать нормально.

Почему не было конфликта символов, я использую nm -a для проверки двух .a lib, у него одинаковый символ метода.

//in libstatic1.a
//...
0000000000000000 T _testcmethds
//...

//in libstatic2.a
//...
0000000000000000 T _testcmethds
//...

1 Ответ

0 голосов
/ 29 мая 2018

Почему не было конфликта символов

Нет конфликта, потому что компоновщик никогда не вставляет объект, содержащий _testcmethds из libstatic2.a в ссылку.

Чтобы лучше это понять, прочитайте это или это .

Примечание: схема, в которой один и тот же глобальный символ (ы) присутствует в нескольких библиотекахчрезвычайно хрупкий.Придет день, когда вы пожалеете, что спроектировали вещи таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...