неверное количество аргументов, указанных для атрибута 'конструктор'
Похоже, вы используете версию GCC более низкого уровня.
Согласно GCC 4.2.1документы, ниже приведены соответствующие GCC 4.2.1 Атрибуты функции :
constructor
destructor
Атрибут constructor вызывает автоматический вызов функции до входа в выполнениеmain ()
...
И соответствующие Атрибуты функции GCC 4.3.0 :
конструктор
деструктор
конструктор (приоритет)
деструктор (приоритет)
Атрибут конструктор вызывает автоматический вызов функции перед вводом выполнения main ()
...
Решение состоит в том, чтобы использовать GCC 4.3 или выше.
В настоящее время я тестирую некоторое программное обеспечение на OpenBSD 5.7, и оно поставляется с компилятором GCC 4.2.1.Мы также поддерживаем CentOS 5, и он поставляется с компилятором GCC 4.1.Вот как выглядит наш код:
// INIT_PRIORITY manages initialization of C++ static objects. Under GCC,
// the library uses init_priority attribute in the range [INIT_PRIORITY,
// INIT_PRIORITY+100]. Under Windows, INIT_PRIORITY enlists
// "#pragma init_seg(lib)". Undefine or set to 0 to disable it.
#define INIT_PRIORITY 250
#ifdef __GNUC__
# define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#endif
#ifdef __clang__
# define CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
#endif
...
#if __GNUC__ && INIT_PRIORITY && ((GCC_VERSION >= 40300) || (CLANG_VERSION >= 20900))
DLL void API DetectX86Features() __attribute__ ((constructor (INIT_PRIORITY + 50)));
DLL bool API CpuId(word32 input, word32 *output);
#elif __GNUC__ && INIT_PRIORITY
DLL void API DetectX86Features() __attribute__ ((constructor));
DLL bool API CpuId(word32 input, word32 *output);
#else
DLL void API DetectX86Features();
DLL bool API CpuId(word32 input, word32 *output);
#endif
Вы, вероятно, должны создать дополнительный класс, например Initialization
, и поместить startMe
в конструктор и ending
в деструктор.Затем создайте статический экземпляр объекта C ++, например Initialization init;
.
Чтобы избежать статического порядка инициализации , фиаско , вы должны использовать init_priority
(также см. этот вопрос о переполнении стека и Разъяснение атрибута init_priority в списке рассылки GCC).init_priority
существует с , по крайней мере, GCC 3.2 .