首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在现代64位Linux中将C函数库与x86汇编程序连接起来

在现代64位Linux中将C函数库与x86汇编程序连接起来
EN

Stack Overflow用户
提问于 2011-10-31 21:03:54
回答 3查看 2.9K关注 0票数 1

我正在阅读一本关于x86编程的书(专业汇编语言,WROX2005)。我昨晚遇到了一些问题,我希望在今天回家之前解决这个问题,这样我就可以开始跑步,继续阅读了。我的机器运行的是x64 Ubuntu (如果我没记错的话是11.04),所以专注于32位x86的文本有点“过时”(我必须在组装时添加-32)。

我试图将C库函数动态链接到我的汇编程序中,但没有成功(下面的命令来自内存)。

代码语言:javascript
复制
ld -dynamic-linking /lib/ld-linux.so.2 -o complex -lc complex.o -m elf_i386

在Linux中运行上面的命令,我得到的消息是它无法理解-lc。好吧,所以我把它拿掉了。

代码语言:javascript
复制
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位的,但我想到底是什么,让我们试试这个:

代码语言:javascript
复制
ld -dynamic-linking /lib/ld-linux-86-64.so.2 -o complex complex.o -m elf_i386

尽管如此,它仍然给出了同样的错误,即'call printf‘无法识别。

我需要使用64位Linux和标准GNU工具将C库函数与我的32位汇编程序动态链接的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-31 21:30:43

听起来您需要安装32位C运行时。在Fedora下,这是:

代码语言:javascript
复制
yum install glibc-devel.i686

但我不知道等效的Ubunutu包的名称;也许:

代码语言:javascript
复制
apt-get install libc6-dev-i386
票数 4
EN

Stack Overflow用户

发布于 2011-11-01 00:12:21

尝试自己构建一个ld命令行几乎总是一个糟糕的主意。让GCC来为你做吧;它会自动处理你不想担心的各种微妙之处。对于32位程序,您需要一个特殊的命令行开关-m32

代码语言:javascript
复制
gcc -m32 -o complex complex.o

如果你有更多的.o文件,只需将它们堆叠在最后即可。如果需要链接到libc以外的任何系统库,请将适当的-lwhatever选项放在所有目标文件之后。

trojanfoe也是正确的;32位工具链是一个可选组件。但您需要的不仅仅是32位C库。先试试这个:

代码语言:javascript
复制
apt-get install gcc-multilib

它应该会吸引你所需要的大部分东西。

票数 2
EN

Stack Overflow用户

发布于 2017-06-27 13:33:06

请尝试以下顺序(假设您的代码文件为try.s):

代码语言:javascript
复制
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格式的可执行文件:

代码语言:javascript
复制
as   -g -o try.o   try.s
ld  -dynamic-linker  /lib64/ld-linux-x86-64.so.2 -lc  -o try try.o
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7954093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档