Основываясь на ответе @Johannes Schaub с решением, подходящим для кода, которым вы не владеете.
Псевдоним функции, которую вы хотите переопределить, в слабо определенную функцию, а затем переопределите ее самостоятельно.
override.h
#define foo(x) __attribute__((weak))foo(x)
foo.c
function foo() { return 1234; }
override.c
function foo() { return 5678; }
Используйте pattern-
%foo.o: ALL_CFLAGS += -include override.h
Рядом: Возможно, вы также можете использовать -D 'foo(x) __attribute__((weak))foo(x)'
для определения ваших макросов.
в вашем Makefile, чтобы добавить флаг компилятора -include override.h
.
%foo.o: ALL_CFLAGS += -include override.h
] Скомпилировать и связать файл с вашей повторной реализацией (override.c
).
модуль <глоток> [Структура] глоток> предложения лучший способ работать с системными платформами и библиотеками путем замены текстового механизма включения препроцессора тем, что Лязг называет семантическим импортом. Для импорта модуля, Вы используете @import
объявление вместо #include
или #import
директивы препроцессору
, Когда компилятор видит, что модуль импортирует @import
, это загружает автономное precompiled
версия двоичного файла. Это также автоматически заботится о соединении с модулем, означающим Вас, больше не должен вручную добавлять платформу в XCode. Так как модуль компилируется только, после того как больше нет никакого преимущества для включения заголовка платформы в prefix.pch. В результате сборка Заголовка Префикса Перед компиляцией, устанавливающая теперь значения по умолчанию на НЕ в XCode.
@import
решает следующие проблемы:
.pch
<глоток> [О] глоток> #import
и #include
, директивы автоматически преобразовываются в @import
негласно, принося Вам пользу модулей без любой работы.
при создании собственного framework
XCode генерирует карту модуля, которая включает umbrella header
<глоток> [О] глоток>
, Когда Вы создадите свое собственное library
использование Objective C , необходимо будет создать собственную карту модуля ( .modulemap) и удостовериться, что его содержание актуально. <глоток> [Создают библиотеку] , глоток> <глоток> [устанавливают modulemap] глоток> <глоток> [Пользовательский modulemap] глоток>