gcc 愚者-“-undefined dynamic_lookup”有什么作用?

eh57zj3b  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(361)

我在阅读RBENV的开放源代码时,偶然发现了这行代码。当我使用configure脚本生成Makefile并运行make时,我看到了以下内容:

$ make
gcc -fno-common     -c -o realpath.o realpath.c
gcc -dynamiclib -dynamic -undefined dynamic_lookup   -o ../libexec/rbenv-realpath.dylib realpath.o

我想知道每个命令的作用,于是我开始在Google上搜索每个标志。我找到了很多标志,但是-undefined dynamic_lookup最初难倒了我。最后我找到了this Github issue,它包含下面的句子:
...必须将选项-undefined dynamic_lookup传递给链接器,以指示将在运行时解析未解析的符号。
考虑到我对这个特定Makefile的用途的了解,这对我来说是有意义的(它允许RBENV使用realpath程序的更快、更高性能的版本作为动态库)。
然而,我无法独立确认这一点,因为我没有看到任何官方愚者文档描述-undefined标志或dynamic_lookup选项。我在谷歌上搜索gcc dynamic_lookup site:gnu.org,但出现的结果只有Bugzilla ticketsemail threads about patches等。我也在我的终端中搜索man gcchelp gcc,但得到的响应是No manual entry for gcc
问题:

  • Github问题对-undefined dynamic_lookup的描述是否正确?
  • 是我疯了,还是gcc文档中缺少了-undefined dynamic_lookup
tkclm6bt

tkclm6bt1#

原来我得到了No manual entry for gcc错误,因为“gcc不再是由Xcode安装的,它实际上安装了clang并称之为gcc”。更多信息请参见this StackOverflow postthis answer。一旦我意识到这一点,我在谷歌上搜索“man gcc”,找到了the docs from man7.org
正如user @n.m.在上面的评论中提到的,-undefined选项(沿着许多其他选项)被转发到达尔文链接器,因此我应该查看的是那些文档。一旦我找到the Darwin linker docs,我就找到了我要找的信息:
未定义的< treatment >
指定如何行程未定义的符号。选项包括:error、warning、suppress或dynamic_lookup。预设值为error。

相关问题