Вы не должны помещать определения в заголовочный файл.
Объявления - это такие вещи, как int add(int a, int b);
и extern int c;
.
Определения - это такие вещи, как int add(int a, int b) { return a+b; }
и int c;
.
Если вы определяете глобальную переменную int c;
в заголовочном файле, каждый исходный файл, который включает в себя #include, будет определять символ с именем "c". Компоновщику это не нравится: есть 2 (или 3, или 4 ...) разные вещи, называемые c
, но все они должны указывать на одну и ту же. Какой из них следует использовать? (Это эквивалентно определению двух (нестатических) функций с одинаковым именем или двух классов с одинаковым именем.)
Вместо этого введите extern int c;
в заголовочный файл и int c;
в один исходный файл.
(«Дублирующие» компиляции для armv6 и armv7 совершенно нормальны. Две архитектуры скомпилированы и связаны отдельно, а затем скомпилированы в «толстый» исполняемый файл. В общем, armv6 работает на «старых» устройствах (до 3GS) armv7 работает на «новых» устройствах (3GS +). «Новые» устройства также могут работать на armv6, но armv7 намного быстрее.)