Я просматриваю книгу, посвященную программированию x86 (профессиональный язык ассемблера, WROX 2005). У меня были некоторые проблемы прошлой ночью, и я надеялся разобраться с этим, прежде чем вернуться домой сегодня, чтобы я мог начать работу и продолжить текст. Моя машина работает под управлением x64 Ubuntu (11.04, если я не ошибаюсь), поэтому текст, посвященный 32-битной x86, немного «устарел» (мне нужно добавить --32 при сборке и т. д.).
Я пытаюсь динамически связать функции C-библиотеки с моей программой сборки, но мне это не удалось (приведенные ниже команды взяты из памяти).
ld -dynamic-linking /lib/ld-linux.so.2 -o complex -lc complex.o -m elf_i386
Выполнение вышеуказанной команды в Linux дает мне сообщение о том, что она не может понять -lc. Хорошо, поэтому я удалил его.
ld -dynamic-linking /lib/ld-linux.so.2 -o complex complex.o -m elf_i386
Затем я получаю уведомление о том, что «printf» не распознан. Надеялись, что динамический компоновщик свяжется с библиотекой, но, похоже, этого не произошло. Перейдя в \lib\, я не смог найти ld-linux.so.2 (как ни странно, это не выдало мне ошибку), но я нашел ld-linux-86-64.so.2. Мой код 32-битный, но я подумал, какого черта, давайте попробуем это:
ld -dynamic-linking /lib/ld-linux-86-64.so.2 -o complex complex.o -m elf_i386
Тем не менее это дало ту же ошибку, что «вызов printf» не был распознан.
Нужна помощь в динамическом связывании функций библиотеки C с моей 32-битной программой сборки с использованием 64-битного Linux и стандартных инструментов GNU.