【发布时间】:2019-09-28 15:30:20
【问题描述】:
我必须做一个汇编 (x86) 程序,它从用户输入中获取 2 个长数字,使用函数将它们相加,然后打印结果。当我使用 read 系统调用时,我得到一个 ASCII 十六进制代码的字符串,我不能像这样添加数字。所以我想使用atol,它是stdlib.h 的一个函数,将字符串转换为long。如何在程序集中包含库?还有另一种方法可以做到这一点吗?
我已经试过了:
-
.file "stdlib.h"(我有当前目录下的lib)
错误:未定义对atol'的引用
- 使用 clang 将 stdlib.h 与 .s 文件一起编译
错误:stdlib.h:文件无法识别:文件格式无法识别
- 只用
#include<stdlib.h>制作一个.c 文件并用.s 文件编译它
错误:未定义对 `atol' 的引用
我运行的comads是
clang function.s -c -g
ld function.o -o function
【问题讨论】:
-
stdlib.h是头文件,而不是库。它仅包含函数声明。请发布您尝试过的实际代码,因为它应该可以使用atol。另外,你用什么汇编器? -
请编辑您的问题以添加您的完整代码。发布代码,以便我可以将其复制到文件中并编译它以重现问题。还要发布您键入的确切命令以组装和链接代码。
-
完美,谢谢
-
只是不要尝试使用
stdlib.h。 -
如果这是家庭作业,我会与教授核实,以确保您可以在 C 库中调用
atoi之类的东西。教授可能希望您自己编写这样的转换程序。
标签: c linux assembly clang x86-64