Если я правильно вас понимаю, вы хотите связать код из устаревших системных платформ.
Статическое связывание означало бы, что вы должны разобрать dilib и создать из него статическую библиотеку, что, по меньшей мере, будет трудно сказать.
Но вы можете просто скопировать уязвимые системные платформы из более старой (глючной) системы в оболочку вашего приложения или в другое место рядом с исполняемым файлом. Затем вы связываете свой исполняемый файл с этими фреймворками.
Вы можете использовать терминал, чтобы увидеть, какие библиотеки вы связываете:
$ cd foo-project/build/Debug
$ otool -L foo
foo:
/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0)
Очень легко изменить команду загрузки в исполняемом файле mach-o, чтобы использовать другой путь для связанной структуры:
$ install_name_tool -change /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio @executable_path/CoreAudio.framework/Versions/A/CoreAudio foo
$ otool -L foo
foo:
@executable_path/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0)
$ DYLD_PRINT_LIBRARIES=1 ./foo
dyld: loaded: /Users/nikolai/foo-project/build/Debug/./foo
dyld: loaded: /Users/nikolai/foo-project/build/Debug/./CoreAudio.framework/Versions/A/CoreAudio
...
Вы можете подготовить (скопированную) структуру так, чтобы при сборке исполняемого файла foo он автоматически получал нужные команды загрузки:
$ install_name_tool -id @executable_path/CoreAudio.framework/Versions/A/CoreAudio CoreAudio.framework/Versions/Current/CoreAudio