如果我在编译时指定实际未使用的库,会发生什么?我的程序仍然依赖于它吗?
我知道问题可能是愚蠢的(为什么有人会在未使用它的情况下链接库?),但情况如下:
我正在从源代码构建QT,我想要包含MySQL驱动程序。但是,由于自上一版本以来存在一些变化,通常记录的方式不可用。我可以指定库的唯一方法是使用configure.exe进行整个QT。这意味着其他库如QtCore或QtNetwork将被编译为g ++ ...... -lmysql,尽管它们不使用此库中的任何函数。问题是,这些库现在实际上是否依赖于mysql?如果我不使用mysql驱动程序且没有mysql库,我能运行程序吗?
修改 我在Windows 7上使用MinGW。
答案 0 :(得分:2)
通常,是的,可执行文件取决于它链接的库。
如果您正在使用gcc,则可以使用链接器标志--as-needed
,这将使链接器省略对未使用其符号的库的引用。
请注意,它可以有所作为,因为仅加载库可以产生可感知的效果(它们的init部分可能会运行等)。
答案 1 :(得分:1)
这完全取决于链接器,即所涉及的编译器。由于dpkg-shlibs能够确定何时可执行文件与共享库无用地链接,我认为对于gcc的ld,答案是“是的,它们实际上将取决于链接库”。