我的程序实际上是否依赖于链接的库,但是没有使用库中的函数?

时间:2011-10-04 11:22:29

标签: c++ qt

如果我在编译时指定实际未使用的库,会发生什么?我的程序仍然依赖于它吗?

我知道问题可能是愚蠢的(为什么有人会在未使用它的情况下链接库?),但情况如下:

我正在从源代码构建QT,我想要包含MySQL驱动程序。但是,由于自上一版本以来存在一些变化,通常记录的方式不可用。我可以指定库的唯一方法是使用configure.exe进行整个QT。这意味着其他库如QtCore或QtNetwork将被编译为g ++ ...... -lmysql,尽管它们不使用此库中的任何函数。问题是,这些库现在实际上是否依赖于mysql?如果我不使用mysql驱动程序且没有mysql库,我能运行程序吗?

修改 我在Windows 7上使用MinGW。

2 个答案:

答案 0 :(得分:2)

通常,是的,可执行文件取决于它链接的库。

如果您正在使用gcc,则可以使用链接器标志--as-needed,这将使链接器省略对未使用其符号的库的引用。

请注意,它可以有所作为,因为仅加载库可以产生可感知的效果(它们的init部分可能会运行等)。

答案 1 :(得分:1)

这完全取决于链接器,即所涉及的编译器。由于dpkg-shlibs能够确定何时可执行文件与共享库无用地链接,我认为对于gcc的ld,答案是“是的,它们实际上将取决于链接库”。