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