2013-04-12 5 views
1

У меня есть два файла библиотеки lib1.a и lib2.a в моем проекте. Lib1.a использует lib2.a. Я дал исходный код lib2.a, но у меня нет исходного кода lib1.a. Для моего проекта я изменил lib2.a позволяет сказать, что я добавляю локальную переменную внутри функции.Изменение в статической библиотеке, используемой другой статической библиотекой

Мой вопрос, имена функций не изменились, мне нужно перекомпилировать lib1.a с измененным lib2.a? Есть ли в любом случае я говорю компоновщику «lib1.a должен использовать новый lib2.a» без исходного кода lib1.a?

+0

Были ли библиотеки изначально скомпилированы компилятором C или C++? – Josh

+0

Библиотеки build с компилятором C –

ответ

2

Если это как раз что-то вроде добавленной локальной переменной, как вы говорите, не нужно перестраивать другую библиотеку. Это связано с тем, что статические библиотеки обычно не связывают друг с другом напрямую, а исполняемый файл в конечном итоге связывает их все вместе.

+0

Чтобы немного расширить это: lib1.a попытается указать на место в памяти, в котором хранится функция lib2.a. Проблема заключается в том, что, поскольку функция lib2.a isn 't в том же файле, что и lib1.a, lib1.a не будет знать, где находится эта функция. Задача компоновщика - «разрешить» эти адреса. Таким образом, компоновщик будет знать, как объединить эти файлы, поскольку каждый из них зависит от другого. –

+0

Теперь, если вы создадите целую новую функцию в lib2.a, lib1.a не узнает об этой новой функции, потому что она ее не использует. Тем не менее, вы можете изменить функцию, как хотите, до тех пор, пока прототип не будет изменен, а lib1.a все равно сможет использовать его, поскольку он относится только к адресам. –