我正在阅读一本关于x86编程的书(专业汇编语言,WROX2005)。我昨晚遇到了一些问题,我希望在今天回家之前解决这个问题,这样我就可以开始跑步,继续阅读了。我的机器运行的是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尽管如此,它仍然给出了同样的错误,即'call printf‘无法识别。
我需要使用64位Linux和标准GNU工具将C库函数与我的32位汇编程序动态链接的帮助。
发布于 2011-10-31 21:30:43
听起来您需要安装32位C运行时。在Fedora下,这是:
yum install glibc-devel.i686但我不知道等效的Ubunutu包的名称;也许:
apt-get install libc6-dev-i386发布于 2011-11-01 00:12:21
尝试自己构建一个ld命令行几乎总是一个糟糕的主意。让GCC来为你做吧;它会自动处理你不想担心的各种微妙之处。对于32位程序,您需要一个特殊的命令行开关-m32
gcc -m32 -o complex complex.o如果你有更多的.o文件,只需将它们堆叠在最后即可。如果需要链接到libc以外的任何系统库,请将适当的-lwhatever选项放在所有目标文件之后。
trojanfoe也是正确的;32位工具链是一个可选组件。但您需要的不仅仅是32位C库。先试试这个:
apt-get install gcc-multilib它应该会吸引你所需要的大部分东西。
发布于 2017-06-27 13:33:06
请尝试以下顺序(假设您的代码文件为try.s):
as --32 -g -o try.o try.s
ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -lc -o try try.o对于x86-64格式的可执行文件:
as -g -o try.o try.s
ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -lc -o try try.ohttps://stackoverflow.com/questions/7954093
复制相似问题