2012-05-23 47 views
0

当我们在Turbo C的工作,我们得到了所有的功能和头文件在默认情况下,我们可以通过 #inlcude通常包括 例如:stdlib.h中,MATH.H如何在UNIX中包含可用于C的基本头文件?

但写一个简单的程序,在使用这样的头文件我收到错误,因为我无法包含这些文件。这些头文件不是我们默认使用的吗? 如果是,那么如何使用这样的头文件? 当我用一个函数sqrt在“文件math.h”我得到误差没有得到包括math.h中,所以我不得不把它列入以下命令:

cc -c aaa.c -I/usr/local/ssl/include 
gcc -o aaa aaa.c -I/usr/local/ssl/include -L/usr/local/ssl/lib -lcrypto -lm 
./aaa 

在此命令:第二个是具有-lm在末端包括文件math.h

再次同样我使用的功能itoa(),其是在stdlib.h中 其中我一个UNIX的Solaris服务器上执行的,但它是没有得到包括和我gettig错误。现在我不知道如何添加这个头文件。

+0

我觉得你很混乱,包括头文件和链接共享库。 – gspr

+1

'-lm'将链接到数学库不包括math.h – Nick

+1

您实际上是否在源代码中包含头文件? – Nick

回答

0

您的编译器应该提供命令行设置,您可以在其中指定include目录,库目录等,如果您查看编译器文档,最好。

E.g. visual studio有一个命令开关-I指定包含文件夹

alt。在某些情况下,它可以被指定为环境变量,例如设置INCLUDE = ...

这一切都取决于你使用的编译器。

+0

但为什么在代码中包含头文件本身不起作用? – maddy2012

3

通常包含math.h标题。代码可以编译。但是,编译器不会找到编译后的二进制文件(math.h的实现)到链接,除非您指定它执行此操作。所以你必须在命令中指定-lm。

itoa()不是stdlib.h中的标准功能,所以请勿使用它。你可以使用sprintf代替。

+0

我想像这个“41 42 31 32”这样在十六进制中得到像这个“AB12”这样的字符串中每个单独字符的ascii代码。 sprintf会为我的目的服务吗?我还检查了turbo c文档。 itoa()存在于stdlib.h中 – maddy2012

+0

它可能在stdlib中。h的Turbo C,但它不在stdlib.h的标准中。对itoa的支持可能可以或不可以跨平台使用,因此使用任何标准都是安全的。如果你想从字符串转换为长,你有strtol。如果你想从int/long转换为字符串,使用printf或sprintf(取决于你的目的)。 – nhahtdh

+0

如何找出链接到的文件的名称? 像我连接math.h的实现文件-lm 我必须包含另一个在openssl的加密库中的头文件。 我想知道如果我有一个头文件什么是它的实现文件的名称,以及如何链接它? – maddy2012

0

默认情况下,这些是从libc中导出的标准库函数,它们应该在任何Unix/Linux版本中可用。您可以检查在头文件存在使用命令状

find/-name "stdio.h" 2>/dev/null 

还要确保您使用链接-l 在libc中的libc

此外,您使用哪种编译器?我建议你使用gcc,这样包含配置已经为编译器完成了,你可以按原样使用并开始。