我是一名普通的C程序员,有一些关于GNU GCC / LD内部构件的问题。
我注意到,在将一系列目标文件传递给GCC(例如gcc main.o otherfile.o
)时,GCC会自动链接libc.a
库文件,而不会在选项中明确指定-lc
。同样,当我使用ncurses
编译程序时,我只需要指定-lncurses
和libtinfo.a
自动链接(无需指定-ltinfo
)。换句话说,即使ncurses
函数使用libtinfo
中的函数(例如,unctrl()
),我也不需要显式链接libtinfo。
怎么可能?
GCC / LD是否有一个"默认库列表"链接时它在哪里寻找丢失的符号?如果存在这样的表,它在哪里以及如何配置?
答案 0 :(得分:2)
直接的答案是,您可以通过将-v
添加到链接命令行来查看命令行选项链接的库。这将显示执行时的命令。
C库和GCC支持库自动链接;其他库必须手动指定。
-lncurses
和libtinfo.a
(libtinfo.so
?)的情况完全不同。在那里,用于构建libncurses.so
的链接命令告诉链接器该库还需要-ltinfo
,因此它会自动获取额外的库。