2016-04-01 4 views
2

У меня есть следующая проблема. У меня есть общая библиотека, которая представляет собой всего лишь группу единиц перевода, связанных друг с другом, поэтому, когда я компилирую эту общую библиотеку, я не получу никакой ошибки компоновщика (неопределенные ссылки, даже если бы у меня было).GCC Связывание общей библиотеки с исполняемым файлом

Общая библиотека загружается динамически из исполняемого файла, который также содержит экспорт, который использует моя разделяемая библиотека (ссылки, используемые в моей библиотеке, разрешены во время выполнения).

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

Я где-то читал, что могу передать «-Wl, - no-undefined» в gcc, чтобы вернуть эти ошибки, действительно, это сработало, но оно также дало мне все неопределенные ссылки на экспорт исполняемого файла. Я хочу отфильтровать эти предупреждения только в области моих единиц перевода.

Возможно ли это? Если нет, как я могу определить ссылку на исполняемый файл, который экспортирует для общей библиотеки.

+1

Как правило, неразрешенные ссылки приводят к сбою связи. Не совсем точно, что вы делаете. Пожалуйста, включите [mcve] в свой вопрос. –

ответ

1

вы можете попробовать связать библиотеку & основная программа с -Wl,-z,now. это должно привести к тому, что среда выполнения ldso немедленно устранит все ссылки и выдаст ошибку, если их не найдено.

В противном случае, я не вижу в руководстве компоновщика опцию «сказать, что этот ELF удовлетворяет символам, но на самом деле не перечисляет его как DT_NEEDED».

Вы можете попробовать использовать -Wl,--no-undefined и разобрать вывод со сценарием, чтобы вы могли отфильтровать символы, которые, как вы знаете, будут удовлетворены основной программой.

другой вариант может обозначать все символы, которые вы знаете, основная программа содержит __attribute__((weak)), а затем использовать -Wl,--no-undefined. слабые символы не будут сообщаться как ошибка.

 Смежные вопросы

  • Нет связанных вопросов^_^