【发布时间】:2021-10-02 18:32:23
【问题描述】:
我有一个共享库——我们称之为主库。它产生一个或多个从属共享库。从共享库通过接口与主共享库交互,交换 std::string、std::vector 等。 由于此编译是在客户站点动态完成的,因此必须尽量减少从属共享库的编译时间。
只要交换的对象不是 STL 容器,一切正常。例如
- master 编译 NonStlObject.cpp 和 NonStlObject.h 并生成全局文本符号 (T)
- 客户端使用 NonStlObject.h 并创建未定义的全局文本符号 (U)
在交换 STL 容器后,我最终会得到 1 + numberOfSlaves 个 STL 代码副本——以及匹配的编译时间——它们在主从服务器中都是弱符号 (W)。
除了包装每个 STL 容器之外,还有什么方法可以避免这种情况?
PS。我不想被告知,用于构建交互共享库的编译器版本必须相同。当然必须!
PPS。 extern 模板在应用于 std::vector 时似乎被编译器忽略
【问题讨论】:
标签: linux c++11 stl linker g++