Если вы получаете эту ошибку при попытке ссылки на файл C, сначала дважды проверьте имена функций для опечаток. Затем дважды проверьте, что вы не пытаетесь вызвать функцию C из среды C ++ / Objective-C ++ без использования конструкции extern C {}
. Я рвал волосы, потому что у меня был класс, который был в файле .mm, который пытался вызвать функции C. Это не работает, потому что в C ++ символы искажены. Фактически вы можете увидеть конкретные символы, созданные с помощью инструмента nm. Terminal на путь к файлам .o и запустите nm -g
в файле, который вызывает символ, и тот, который должен иметь этот символ, и вы должны увидеть, совпадают ли они или нет, что может дать ключ к ошибке .
nm -g file.o
Вы можете проверить символы C ++, которые были запятыми:
nm -gC file.o
Почему вы выбираете один блок над другим? Если ваше решение основано на размере указателя, используйте sizeof(void*) == 8
. Если ваше решение основано на размере целого числа, используйте sizeof(int) == 8
.
Я хочу сказать, что название самой архитектуры редко должно иметь какое-либо значение. Вы проверяете только то, что вам нужно проверить, для целей того, что вы собираетесь делать. Ваш вопрос не очень ясно описывает цель проверки. То, что вы спрашиваете, похоже на попытку установить, установлен ли DirectX, путем запроса версии Windows. В вашем распоряжении более портативные и универсальные инструменты.
Это работает на MSVC ++ и g ++:
#if defined(_M_X64) || defined(__amd64__)
// code...
#endif
Вот хороший обзор для Mac OS X:
http://developer.apple.com/documentation/Darwin/Conceptual/64bitPorting
Если Вы компилируете для платформы Windows, необходимо использовать:
#ifdef _WIN64
компилятор MSVC определяет это и для x64 и для ia64 платформ (Вы не хотите отключать тот рынок, не так ли?). Я не уверен, делает ли gcc то же - но это должно, если это не делает.
альтернатива
#ifdef WIN64
, который имеет тонкое различие. WIN64 (без начального символа подчеркивания) определяется SDK (или конфигурация сборки). Так как это определяется конфигурацией SDK/сборки, она должна работать точно также с gcc.