我在阅读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 tickets,email threads about patches等。我也在我的终端中搜索man gcc
和help gcc
,但得到的响应是No manual entry for gcc
。
问题:
- Github问题对
-undefined dynamic_lookup
的描述是否正确? - 是我疯了,还是gcc文档中缺少了
-undefined dynamic_lookup
?
1条答案
按热度按时间tkclm6bt1#
原来我得到了
No manual entry for gcc
错误,因为“gcc不再是由Xcode安装的,它实际上安装了clang并称之为gcc”。更多信息请参见this StackOverflow post和this answer。一旦我意识到这一点,我在谷歌上搜索“man gcc”,找到了the docs from man7.org。正如user @n.m.在上面的评论中提到的,
-undefined
选项(沿着许多其他选项)被转发到达尔文链接器,因此我应该查看的是那些文档。一旦我找到the Darwin linker docs,我就找到了我要找的信息:未定义的< treatment >
指定如何行程未定义的符号。选项包括:error、warning、suppress或dynamic_lookup。预设值为error。