首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么libc包含同义词?

为什么libc包含同义词?
EN

Stack Overflow用户
提问于 2011-07-12 16:44:47
回答 3查看 201关注 0票数 1

表单的同义词_name存在于没有在其名称前面加上前导下划线的名称条目。例如,libc包含getopt和_getopt。

代码语言:javascript
复制
Figure 3-2: libc Contents, Names with Synonyms

  __assert     getdate      lockf **     sleep        tell ** 
  cfgetispeed  getopt       lsearch      strdup       tempnam
  cfgetospeed  getpass      memccpy      swab         tfind
  cfsetispeed  getsubopt    mkfifo       tcdrain      toascii
  cfsetospeed  getw         mktemp       tcflow       _tolower
  ctermid      hcreate      monitor      tcflush      tsearch
  cuserid      hdestroy     nftw         tcgetattr    _toupper
  dup2         hsearch      nl_langinfo  tcgetpgrp    twalk
  fdopen       isascii      pclose       tcgetsid     tzset
  __filbuf     isatty       popen        tcsendbreak  _xftw
  fileno       isnan        putenv       tcsetattr    
  __flsbuf     isnand **    putw         tcsetpgrp    
  fmtmsg **    lfind        setlabel     tdelete    

为什么libc包含同义词?

更新

如何使用同义词?我尝试将getopt替换为_getopt,但只得到了undefined reference to_getopt‘’

EN

回答 3

Stack Overflow用户

发布于 2011-07-12 16:52:48

可能是因为它们最初是不标准的,后来又添加到POSIX中,删除了前缀,但需要向后兼容,并且保持不变,因此自然需要使用同义词。

票数 0
EN

Stack Overflow用户

发布于 2011-07-12 16:59:56

或者(按照@rubenvb的答案(我认为这是正确的)来保持源代码级与一些这样命名的Win32库函数的兼容性。_toupper就是其中之一。

票数 0
EN

Stack Overflow用户

发布于 2012-03-01 16:21:16

引用"SYSTEM应用程序二进制接口“

C库包括它的一些服务的同义词。这些其他符号可用于符合语言和系统标准。例如,System defi将read作为操作系统工具的名称。另一方面,ANSI并不是de read,它禁止严格一致的实现在没有前导下划线(_)的情况下篡夺应用程序名称。因此,如果read的同义词不可用,系统就无法支持严格一致的ANSI语言实现。

注意:虽然以下接口不需要同义词,但允许存在同义词。

简而言之,同义词是与ANSI C建议一致的。如果使用Linux,ELF格式文档中的一些同义词函数在glibc中似乎没有同义词,因此您可能需要用readelf -s /usr/lib/libc.a检查符号的存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6667863

复制
相关文章

相似问题

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