-
- Даже если библиотека без исходников, можно выкрутиться. Подумай.
Либа вызывает каллбак по ИМЕНИ, а ты там дальше твори что душе
угодно (в том числе и динамически переназначай). Но в принципе в
данном варианте каллбак по указателю на функцию вполне уместен. il-2(135 знак., 19.05.2024 15:27)
- Цитата: "Либа вызывает каллбак по ИМЕНИ". Как-то не вяжется с моим
пониманием как работает линкер. ПМСМ это линкер прописывает адрес размещения процедуры, идетифицируемый по имени. Адрес
прописывается прямо машинный код в местах вызова. - Cкpипaч(19.05.2024 16:10)
- Наверно речь в т.ч. о том, что функции скомпилированной либы могут
переопределяться вне неё - они для основного кода по сути weak.
Потому функция пользователя с тем же именем будет применена в либе.
И это обеспечит линкер. В вариантах с исходниками weak пишут
ручками - Vit(19.05.2024 18:45)
- Все будет работать и без веак. Скомпилированная либа может
ссылаться на неразрешенные при компиляции имена. Но в проекте, где
эта либа используется, неразрешенное имя должно быть определено. - il-2(19.05.2024 20:01)
- если компилируете из исходников то для подмены по имени нужна
"слабая функция". примеры можете посмотреть, например, в том же HAL
(в исходниках). Vit(381 знак., 19.05.2024 20:25, ссылка)
- Я тут НАЛ ругаю, а вы его в пример :-) Без __weak будет все
прекрасно, и с исходниками и без. Только пользователь при этом
будет ОБЯЗАН определить эту функцию у себя. __weak нужен, чтобы
пользователя лишний раз не нервировать... если пол бетонный :-) - il-2(20.05.2024 07:08)
- заставлять читать не всегда присутствующее описание к коду это свинство. все функции в скомпилированных либах уже слабые без добавления __weak. переназначение по имени без использования макросов при нескомпилированной библиотеке достигается именно использованием __weak. Vit(396 знак., 20.05.2024 10:54)
- Я тут НАЛ ругаю, а вы его в пример :-) Без __weak будет все
прекрасно, и с исходниками и без. Только пользователь при этом
будет ОБЯЗАН определить эту функцию у себя. __weak нужен, чтобы
пользователя лишний раз не нервировать... если пол бетонный :-) - il-2(20.05.2024 07:08)
- если компилируете из исходников то для подмены по имени нужна
"слабая функция". примеры можете посмотреть, например, в том же HAL
(в исходниках). Vit(381 знак., 19.05.2024 20:25, ссылка)
- Все будет работать и без веак. Скомпилированная либа может
ссылаться на неразрешенные при компиляции имена. Но в проекте, где
эта либа используется, неразрешенное имя должно быть определено. - il-2(19.05.2024 20:01)
- Наверно речь в т.ч. о том, что функции скомпилированной либы могут
переопределяться вне неё - они для основного кода по сути weak.
Потому функция пользователя с тем же именем будет применена в либе.
И это обеспечит линкер. В вариантах с исходниками weak пишут
ручками - Vit(19.05.2024 18:45)
- Цитата: "Либа вызывает каллбак по ИМЕНИ". Как-то не вяжется с моим
пониманием как работает линкер. ПМСМ это линкер прописывает адрес размещения процедуры, идетифицируемый по имени. Адрес
прописывается прямо машинный код в местах вызова. - Cкpипaч(19.05.2024 16:10)
- Даже если библиотека без исходников, можно выкрутиться. Подумай.
Либа вызывает каллбак по ИМЕНИ, а ты там дальше твори что душе
угодно (в том числе и динамически переназначай). Но в принципе в
данном варианте каллбак по указателю на функцию вполне уместен. il-2(135 знак., 19.05.2024 15:27)