я объявленным внешнюю функцию со слабым атрибутом GCC в .c файле:Слабая связь со статическими библиотеками
extern int weakFunction() __attribute__ ((weak));
скомпилированный файл объекта weakFunction, определенных как слабый символ. Выход нм:
1791: w weakFunction
Я зову слабую определенную функцию следующим образом:
if (weakFunction != NULL)
{
weakFunction();
}
Когда я связать программу определения объектных файлов в качестве параметров GCC (gcc main.o weakf.o -o main.exe
) слабые символы работать нормально , Если я покину слабый сигнал.o из ссылки, адрес функции будет NULL в main.c, и функция не будет вызываться.
Проблема в том, что, когда weakf.o находится внутри статической библиотеки, по какой-либо причине компоновщик не находит эту функцию, и адрес функции всегда заканчивается как NULL. Статическая библиотека создана с ar: ar rcs weaklibrary weakf.o
У кого-нибудь были подобные проблемы?
Спасибо, эта информация помогла. Пока я буду использовать параметр -whole-archive, пока не найду лучший способ привязки символов. Параметр -u не работал :( –
Я должен сказать, -u работает на моем примере –