Как уже говорилось ранее, библиотека не сможет узнать, как приложение (будучи клиентом для библиотеки) скомпилировано, но должен работать наоборот. Кроме того, я думаю, что вы говорите о динамическом связывании, поскольку статическое связывание, безусловно, не будет иметь разные переключатели в одно и то же время.
Подобно уже полученному ответу Эндрю Джонсона, библиотека может предоставить метод для определения, была ли она скомпилирована с поддержкой больших файлов или нет. Зная, что такие переключатели времени сборки в основном выполняются с определениями в C, это может выглядеть так:
//in library:
BOOL isLargeFileSupport (void)
{
#ifdef LARGE_FILE_SUPPORT
return TRUE;
#else
return FALSE;
#endif
}
Затем приложение знает, как обрабатывать размеры файлов, сообщаемые этой библиотекой, или может отказаться работать при несовместимости:
//in application
BOOL bLibLFS = lib_isLargeFileSupport();
BOOL bAppLFS = FALSE;
#ifdef LARGE_FILE_SUPPORT
bAppLFS = TRUE;
#endif
if (bLibLFS != bAppLFS)
//incompatible versions, bail out
exit(0);