作者tinlans ( )
看板Programming
标题Re: [问题]C
时间Thu Dec 28 01:13:59 2006
※ 引述《twisters121 (...)》之铭言:
: 标题: [问题]C
: 时间: Wed Dec 27 11:12:15 2006
:
: 一个程式 a.exe,
:
: 程式如何知道print() function的实作在哪个library?
:
: 程式码如下
:
: #include <stdio.h>
:
: void main(void)
: {
: print("this is c language");
: }
:
: → final01:不是有include 140.134.35.48 12/27 14:33
: → newdominic:把第一行删掉然後compile看错误讯息= = 203.68.127.1 12/27 17:17
因为 ptt 这边转信挂了 (不能转出也没转入),
外面寄信进来也不见得会成功,
所以直接过来板上回。
1. 你在信中提到你用 Dev-C++ 的部分,
因为我没有装 Dev-C++,
所以没有办法帮你 try。
IDE 环境没有 linker 选项的话,
那就得翻 IDE 手册或 linker 手册得知预设值。
要不就是 windows 上要有类似 UNIX 的 ldd 和 nm 工具,
但我从不在 windows 写程式所以不知道。
如果是 UNIX / UNIX-like 上的 GCC,
你没特别下 -static 指定静态连结的话,
一般来说就是 libc.so (用 ldd 可以追到路径),
libc.so 通常是从 glibc 造出来的,
去抓 glibc 的 source code 就可以看到 source code。
2. 关於你这篇文,其实光看 C code 根本看不出来。
而且标准 C 没有 print() 只有 printf(),
假设你说的是 printf() 好了,
推文里面给你的答案也不会有任何帮助。
因为被实作在哪个 library 里,
跟 compiler 完全无关,
compiler 也不知道这件事,
这些全部都是 linker 的责任。
通常 linker 的预设值,
或是 compiler 预设会 pass 给 linker 的参数,
里面就会有这些资讯,
就我所知 Dev-C++ 後端用的是 MingW32 (GCC 的一种),
所以这些预设值很可能跟 GCC 一样直接编死在执行档里,
没有类似 UNIX 的 strings 这种工具去剥出执行档里的字串的话,
也没有类似 ldd 的东西的话,
那还是看不出来的。
3. 回推文的部分。
原 po 想知道的可能是 printf() 实际上放在哪个 .LIB 或 .DLL,
因为他用 mail 回文的时候是这个意思,
所以跟 include 或第一行没有任何关系。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.216.58