我想以重要的通知作为开头,我不是 C/C++ 程序员,并且对库的链接如何在 C 中工作知之甚少。
我们的代码使用 libstdc++.so.6(我认为是 gcc 3.4)。我们有使用 libstdc++.so.5(我认为是 gcc 2.something 或 3.2)的第三方预编译(闭源)库。这是在linux上。我们有第三方库的 .a 和 .so 版本。
是否可以使用 3rd 方库构建我们的应用程序?如何?是否可以在没有 libstdc++.so.5 安装我们的机器的情况下构建/运行我们的应用程序,如何?
如果我忘记了一些重要信息,请告诉我——我几乎不知道与这些东西有什么关系。我意识到一个完整的答案可能是不可能的;我真的在寻找方向和指导。静态链接这个,动态链接,重建那个,预构建某某,切换到版本 x,或符号链接 quizdoodle 等。
更新:
我们尝试使用dlopen
withRTLD_LOCAL
将 3rd 方库与我们应用程序的其余部分隔离开来。这似乎大部分都有效,但是,由于未知原因,我们留下了大量的内存泄漏。我们怀疑,当我们调用.so.6 时,dlopen
第三方库会malloc
从已加载的 .so.6 中提取符号,而事情会变得混乱。
傻笑,我们尝试将第三方库放入LD_PRELOAD
,然后运行我们的应用程序,内存泄漏似乎完全消失了。