免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: relleber
打印 上一主题 下一主题

[函数] 为什么include了头函数,仍然不能用里面定义的函数 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2004-04-03 20:31 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

原帖由 "relleber" 发表:
大侠!谢谢!是不是因为solaris所以才会这样,linux下好像不会,为什么?
如果自己写的一个头文件,那么是不是先编译生成 .o的文件(.h头文件能直接编译吗),再用ar命令来创建一个新的库呢?
头文件对应什么库名?.........

呵呵,.h文件是不能编译成.o文件的。
编译成.o文件的是.c或.cpp,也就是源代码。

论坛徽章:
0
12 [报告]
发表于 2004-04-03 20:48 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

[quote]原帖由 "relleber" 发表:
大侠!谢谢!是不是因为solaris所以才会这样,linux下好像不会,为什么?
如果自己写的一个头文件,那么是不是先编译生成 .o的文件(.h头文件能直接编译吗),再用ar命令来创建一个新的库呢?
头文件对应什么库名

论坛徽章:
0
13 [报告]
发表于 2004-04-03 20:59 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

原帖由 "release" 发表:
man gcc里没有这些参数的解释,-lnsl -lsocket -lresolv。老兄是从哪里看来的??

还有请教Makefile的帮助文档在哪里?


以前学 socket 编程的时候看到的,就是比较经典的那个 tutorial,叫 Bjee 甚么的。

关于如何知道应该连接哪些库,我前几天曾发贴求助,没人响应。我后来想道一个方法,发在这里了:

在系统中找一个可能用到相关函数的可执行文件,然后 ldd 它。比如,楼主的的程序与网络有关,我选ftp 来参照

bash-2.05$ ldd /usr/bin/ftp
        libsocket.so.1 =>;        /usr/lib/libsocket.so.1
        libnsl.so.1 =>;   /usr/lib/libnsl.so.1
        libc.so.1 =>;     /usr/lib/libc.so.1
        libdl.so.1 =>;    /usr/lib/libdl.so.1
        libmp.so.2 =>;    /usr/lib/libmp.so.2
bash-2.05$


容易看出,libsocket, libnsl. 此外,在这里 libresolv 是不必要的。

论坛徽章:
0
14 [报告]
发表于 2004-04-03 20:59 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

谢谢,不过我到底怎么知道什么库名对应什么函数呢?

论坛徽章:
0
15 [报告]
发表于 2004-04-03 21:05 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

看我上面的帖子, 找到相应的库,然后 nm 这个库,在 nm 的输出中 grep

论坛徽章:
0
16 [报告]
发表于 2004-04-03 21:22 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

好办法,谢谢了!!

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2004-04-03 21:25 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

不知你们的系统怎么样,
我用aix5l,如果能man到这个函数,
在最上方会告诉这个函数是在哪个库里面的。

论坛徽章:
0
18 [报告]
发表于 2004-04-03 21:35 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

原帖由 "lenovo" 发表:
不知你们的系统怎么样,
我用aix5l,如果能man到这个函数,
在最上方会告诉这个函数是在哪个库里面的。


我刚才在 solaris 9 上试了一下,果然是有说明的,在man page 的右上角。

但在  linux 上的却没有,不知何故?

在 solaris 9 中 man sin, man page 的右上角 sin(3M)
在 linux 中 man sin, man page 的右上角 sin(3)

论坛徽章:
0
19 [报告]
发表于 2004-04-03 22:10 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

果然可以用man来查询函数,这个方法简单

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不过如果我要自己写一个头文件,在编译的时候要用到这个头文件里面定义的函数或常量的话,该怎么办呢?
因为我看stevens写的unix网络编程里面大部分都用到了他自己写的一个头文件“unp.h”,我该怎么编译他呢,是不是要先用这个头文件生成一个库,再把这个库用-l命令?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
20 [报告]
发表于 2004-04-03 22:53 |只看该作者

为什么include了头函数,仍然不能用里面定义的函数

原帖由 "relleber" 发表:
果然可以用man来查询函数,这个方法简单

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
不过如果我要自己写一个头文件,在编译的时候要用到这个头文件里面定义的函数或常量的话,该怎么?.........

你可以生成一个库。
也可以生成.o文件,然后和你的文件一起编译
就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP