Wol*_*lan 1 c linux assembly gnu
我正在阅读一本专注于 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
Run Code Online (Sandbox Code Playgroud)
在 Linux 中运行上述命令会显示它无法理解 -lc 的消息。好吧,所以我把它删除了。
ld -dynamic-linking /lib/ld-linux.so.2 -o complex complex.o -m elf_i386
Run Code Online (Sandbox Code Playgroud)
然后我收到“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
Run Code Online (Sandbox Code Playgroud)
但它仍然给出了相同的错误,即无法识别“call printf”。
需要帮助使用 64 位 Linux 和标准 GNU 工具将 C 库函数与我的 32 位汇编程序动态链接。
听起来您需要安装 32 位 C 运行时。在 Fedora 下是这样的:
yum install glibc-devel.i686
Run Code Online (Sandbox Code Playgroud)
但我不知道等效的 Ubunutu 包的名称;也许:
apt-get install libc6-dev-i386
Run Code Online (Sandbox Code Playgroud)