我正在创建一个仅模板的 C++ 库。但是,我还想提供一个“空”共享库,以便通过控制 SONAME,我可以在模板发生变化时强制重建模板消费者,从而导致实例化模板 ABI 不兼容。
可悲的是,如果一个特定的用户-Wl,--as-needed
在他LDFLAGS
的 中,链接器将从中删除我的共享库,NEEDED
因为编译的可执行文件没有从它请求任何符号。如何确保程序始终与我的库链接,最好不要引入不必要的虚拟函数调用(或者如果必须,使它们的负担最小)?
编辑:作为说明,特定的模板类提供静态方法,通常只使用那些静态方法。因此,依赖构造函数中的任何内容都不是一个好主意,我真的很想避免通过某种强制执行来加重所有方法的负担。
受@EmployedRussian的启发,我实现了:
extern int dummy;
namespace
{
struct G
{
inline G()
{
dummy = 0;
}
};
static const G g;
}
但遗憾的是,它为每个单元(包括头文件)执行一次分配。