【问题标题】:How does boost link libs?如何提升链接库?
【发布时间】:2014-07-30 18:02:36
【问题描述】:

据我了解,我必须链接其他库或不使用 boost,这取决于某些模块是否需要它们,或者它们只是独立的模板/宏。

例如使用 boost/thread.hpp 我必须链接 boost_thread 和 boost_system。

  1. 因此,如果我动态链接它们,我需要在目标平台上进行增强,还是只将它们添加到最终应用程序(相同或不同目录)?

2.如果我不想要任何依赖项,我可以静态链接它们,但是应用程序的大小会随着整个库的大小或我使用的部分库的大小而增长?

【问题讨论】:

    标签: c++ boost static-linking dynamic-linking


    【解决方案1】:

    第一季度。是还是不是。如果您在 Windows 中,则共享库 (.dll) 可以位于系统目录或本地目录(程序所在的目录)中。如果您使用的是 linux,则共享库 (.so) 必须在 LD_LIBRARY_PATH 中。

    第二季度。不,程序的大小不会随着 整个 库的大小而增长。如果你的链接器不是很疯狂,他会选择必要的库对象并只链接程序。

    【讨论】:

    • 在 Windows 上,DLL 可以位于 PATH 中的任何位置,即使它既不是系统也不是本地目录。
    • 关于Q1:那么不管是什么平台,我们在系统的某个地方都需要这些来自boost的动态库,否则应用程序不会执行?如果是的话,如果我们想拥有可移植的应用程序(在相同的架构中),将它静态链接是更好的做法(在提升的情况下)吗?
    • @AdamAdamowicz 是的。也许您已经看到了诸如缺少 XXX.dll 或 YYY.so 之类的错误。但是静态链接不会使程序具有可移植性。每个平台都有自己的方式(例如二进制格式、API、文件系统等),您必须遵循这一点。
    • 是的,我明白,我的意思是在相同平台和架构上的“可移植”,但独立于系统中安装的库。
    • @AdamAdamowicz 那么,你应该使用静态库 - 因为这一点,我几乎不使用共享库>o
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多