Это может объяснить некоторые странные ошибки, о которых сообщалось в Snow Leopard, но только если эта конструкция работала в более ранних выпусках.
Вы правы в том, что MyInitFunc
должен был быть вызван исключительно в результате связи с программой, даже если программа простая C89, даже если остальная часть полностью является другим языком.
Проблема в том, что код запуска C в вашей системе не ищет в разделе .ctors
и в разделе .dtors
адреса конструкторов и деструкторов. Я не уверен, верно ли это для всех платформ, но обычно это __do_global_ctors
, часть libgcc
.
Это ошибка платформы, или ваш gcc был построен неправильно, или Apple просто решила действовать по-другому, и gcc не поддерживает платформу должным образом.
Вы можете попробовать cc -v ...
и убедиться, что вызывается collect2
вместо ld
напрямую.