У меня есть кроссплатформенная библиотека, которая имеет странную проблему только на iPhone и только в выпуске.
// .h
class cColor
{
public:
static const cColor Red;
static const cColor Green;
static const cColor Blue;
u8 r;
u8 g;
u8 b;
u8 a;
inline cColor(...) : ... { }
};
// .cpp
const cColor cColor::Red(0xFF, 0x00, 0x00);
const cColor cColor::Green(0x00, 0xFF, 0x00);
const cColor cColor::Blue(0x00, 0x00, 0xFF);
Это похоже на фиаско порядка инициализации, но проблема не в статическом методе, а позже впрограмма.Все cColor :: Red, Green, Blue установлены в 0. На самом деле я помещаю некоторую команду printf в конструктор {}, и он ничего не печатает, но, возможно, все в порядке, поскольку это происходит во время инициализации глобальных переменных.
Теперь самое худшее: библиотека работала и в Release до недавнего времени, прежде чем я добавил несколько функций (200-300 строк) кода Objective-C, которые даже не выполняются.Просто уменьшив размер кода, я могу решить эту проблему, но для меня это не вариант.Кроме того, приложение не такое большое, память не может быть проблемой.
Кстати, cColor включен в предварительно скомпилированный заголовок в библиотеке и позже в приложении, которое использует библиотеку.
Помогите!У меня действительно нет идей.
Отредактировано: вот больше информации ...
Я перенес только код инициализации из библиотеки в свое приложение, и теперь константы получаютинициализирован правильно.
Я действительно думаю, что компоновщик что-то напутал.
Есть идеи?