【发布时间】:2016-02-28 16:54:11
【问题描述】:
以下是我的场景: 我有一个可执行文件以及多个共享库(.dll 或 .so)。可执行文件和共享库(.dll 或 .so)都使用一组公共库。由于它们是公共库,我想减少共享库的二进制占用空间,为了减少共享库的占用空间,我从可执行文件中导出公共库的内容并将它们导入共享库(dll 或 .so )。
注意:虽然脚印的大小并不是众多原因中的唯一一个,但暂时我们可以坚持它是主要原因。
问题: 在公共库中有一些内联函数和一些模板类。当我使用性能优化标志编译可执行文件和共享库时,内联/模板类在可执行库和共享库中都内联。如果修改了内联定义并且有一些共享库具有不同的内联函数定义集,则会产生问题。
如何解决这个问题?
当我开始考虑这个时,甚至 CRT 提供的 STL 类都是模板类。即使在他们的情况下也存在类似的问题。他们解决了这个问题吗?如果他们修改 std::vector 的定义会发生什么?请帮忙。
【问题讨论】:
-
没有“模板类”之类的东西。 C++ 有类模板。类模板是一个模板。这不是一堂课。您不能从库中导出它。您也不能从库中导出内联函数。您可以使用精心设计的现代编程语言来解决这个问题。
-
是的,我提到了一个类模板。感谢您的回答。你能建议任何其他替代方案来解决这个问题吗?除了改变编程语言。
-
您知道有一个 C++ 库可以解决您的问题吗?查看编译器附带的标准库。看升压。这些是现有的最好的 C++ 库。你想比世界上最好的更好吗?这是一个非常崇高的愿望,但你不觉得在网上问陌生人怎么做有点幼稚吗?
-
好的,感谢您的快速回复。我认为这并不幼稚,因为解决问题的一种可能方法是在线检查。当您遇到问题时,请在论坛上在线查看是否有人遇到过/曾经遇到过类似的问题?如果他们已经解决了,他们是如何解决的。可能“你能建议”这句话引发了错误的想法。我不是想强行回答,而是问你是否知道任何替代方案。再次感谢您。
标签: dll dllimport dllexport .so