Как я могу обнаружить, если я компилирую для архитектуры на 64 бита в C++

Если вы получаете эту ошибку при попытке ссылки на файл C, сначала дважды проверьте имена функций для опечаток. Затем дважды проверьте, что вы не пытаетесь вызвать функцию C из среды C ++ / Objective-C ++ без использования конструкции extern C {}. Я рвал волосы, потому что у меня был класс, который был в файле .mm, который пытался вызвать функции C. Это не работает, потому что в C ++ символы искажены. Фактически вы можете увидеть конкретные символы, созданные с помощью инструмента nm. Terminal на путь к файлам .o и запустите nm -g в файле, который вызывает символ, и тот, который должен иметь этот символ, и вы должны увидеть, совпадают ли они или нет, что может дать ключ к ошибке .

nm -g file.o

Вы можете проверить символы C ++, которые были запятыми:

nm -gC file.o
21
задан Brian Tompsett - 汤莱恩 3 June 2016 в 18:24
поделиться

6 ответов

Почему вы выбираете один блок над другим? Если ваше решение основано на размере указателя, используйте sizeof(void*) == 8. Если ваше решение основано на размере целого числа, используйте sizeof(int) == 8.

Я хочу сказать, что название самой архитектуры редко должно иметь какое-либо значение. Вы проверяете только то, что вам нужно проверить, для целей того, что вы собираетесь делать. Ваш вопрос не очень ясно описывает цель проверки. То, что вы спрашиваете, похоже на попытку установить, установлен ли DirectX, путем запроса версии Windows. В вашем распоряжении более портативные и универсальные инструменты.

9
ответ дан flodin 29 November 2019 в 06:42
поделиться

Это работает на MSVC ++ и g ++:

#if defined(_M_X64) || defined(__amd64__)
  // code...
#endif
18
ответ дан Goles 29 November 2019 в 06:42
поделиться
6
ответ дан GSerg 29 November 2019 в 06:42
поделиться
#ifdef _LP64

Работает на обеих платформах

2
ответ дан 29 November 2019 в 06:42
поделиться

Вот хороший обзор для Mac OS X:

http://developer.apple.com/documentation/Darwin/Conceptual/64bitPorting

1
ответ дан mike511 29 November 2019 в 06:42
поделиться

Если Вы компилируете для платформы Windows, необходимо использовать:

#ifdef _WIN64

компилятор MSVC определяет это и для x64 и для ia64 платформ (Вы не хотите отключать тот рынок, не так ли?). Я не уверен, делает ли gcc то же - но это должно, если это не делает.

альтернатива

#ifdef WIN64

, который имеет тонкое различие. WIN64 (без начального символа подчеркивания) определяется SDK (или конфигурация сборки). Так как это определяется конфигурацией SDK/сборки, она должна работать точно также с gcc.

1
ответ дан Michael Burr 29 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: