#c #gcc
#c #gcc
Вопрос:
macOS Catalina 10.15.3 2.6 ГГц 6-ядерный процессор Intel Core i7
Я следую вместе с учебником по информатике и пытаюсь скомпилировать простую программу на языке ассемблера, чтобы я мог видеть, что происходит под капотом. Я делаю это, используя 32-разрядную архитектуру, поскольку это то, что текст использует для своей компиляции (это старая книга), но я запускаю это на 64-разрядной машине. Поскольку я просто прошу компилятор вывести файл (не запускать его), я бы не ожидал, что это будет проблемой.
У меня есть следующая программа в файле с именем sum.c
:
int accum = 0;
int sum(int x, int y) {
int val = x y;
accum = val;
return val;
}
int main() {
return sum(3,2);
}
Я пытаюсь скомпилировать его до сборки, используя следующую команду в моем терминале:
gcc -m32 -O1 -o sum sum.c
Вместо ожидаемого sum
выходного файла я вижу следующую ошибку:
ld: warning: The i386 architecture is deprecated for macOS (remove from the Xcode build setting: ARCHS)
ld: warning: ignoring file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd, missing required architecture i386 in file /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd
ld: dynamic main executables must link with libSystem.dylib for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Из того, что я могу сказать, компилятор игнорирует файл libSystem.tbd
, потому что для этого файла требуется 32-разрядная архитектура, а затем компоновщик впоследствии завершается с ошибкой, потому что этот файл отсутствует в компиляции.
Я бы хотел иметь возможность следовать примерам в тексте, но я не уверен, какие у меня есть варианты, кроме переключения на 32-разрядную машину. Есть идеи?
Комментарии:
1. Ну, просто используйте godbolt
2. Рассмотрите возможность использования Debian и прочитайте документацию GCC . Вы хотите скомпилировать
gcc -Wall -Wextra -g
. Почему вы не используете 64-битный компилятор? Читайте современный C и черпайте вдохновение из существующего программного обеспечения на github3. @BasileStarynkevitch текст, который я использую в качестве ссылки, использует 32-разрядную архитектуру в своем примере кода.
4. Если вы просто хотите увидеть язык ассемблера, как насчет
gcc -m32 -O1 -S sum.c
? Это скомпилирует исходный код C для вывода сборкиsum.s
.5. Лучше использовать
gcc -m32 -O2 -S -Wall -fverbose-asm sum.c
, предполагая недавний и подлинный компилятор GCC