标头与库不匹配的后果?

问题描述 投票:0回答:1

我逐渐意识到,在开发 C++ 库时,有时不可避免地将实现代码包含在与库关联的

.h
文件中。这种情况的一个例子是开发方法的
template
class
等。

我已经明白,某物的

template
会将其所代表的内容从其自身的具体实现转换为编译器在使用
template
背后创建具体实现时要遵循的指令。在库开发的背景下,这告诉我,将
template
方法、
class
等的实现代码从声明
template
的文件中移出是不可能的,否则链接库的人将不会拥有在使用
template
背后编译具体实现所需的说明(除其他原因外,无法在与
template
声明不同的文件中拥有
template
的实现代码)。

特别考虑上述示例,如果库附带的一个或多个

.h
文件与库本身的内容不完全匹配,那么链接库的后果是什么?

我已经接受了,如果不在声明这些

template
的文件中包含完整的实现代码,我根本无法向链接库的人提供
.h
的东西,因为它只是不包含否则就没有意义。我还应该补充一点,在我想要实现的目标的更大背景下,我无法具体实现本示例中
template
的所有变体,因为我希望库的链接器能够具体实现它们自己的变体在这些
template
上。也就是说,我只是想知道如果链接库的人试图篡改
template
文件会发生什么。编译会失败吗?链接会失败吗?构建会成功并产生大量运行时错误吗?我会在 MRE 中测试自己,但我对库开发没有足够的信心,无法知道 MRE 的任何结果本身是否是我自己无能的结果。
感谢您的阅读!

c++ templates dll
1个回答
0
投票
如果库附带的一个或多个 .h 文件与库本身的内容不完全匹配,那么链接库会产生什么后果?

它可能会以无法预见的方式崩溃和燃烧。

如果 ABI 的唯一区别在于您不使用的符号之间,那么它可能会起作用。

它甚至可能无法生成可以链接的代码,因此您甚至可能无法生成二进制文件。

所以,这要看情况。

© www.soinside.com 2019 - 2024. All rights reserved.