当库更新时,我应该重新编译程序
when a library updates, should I recompile the program
如果用C++编写的共享库更新(只添加一些新的类成员函数),我应该重新编译整个程序吗?
如何添加一些公共或私有数据成员?
谢谢
只要它是一个共享库,与您的主程序动态链接,不,您不会,除非您更新了主应用程序和库之间共享的标头。
对象大小可能已更新,如果您在主程序上使用静态分配,可能会产生奇怪的问题(新的对象大小将溢出):
int main(int argc, char * argv[])
{
MyClass list[12];
return 0;
}
在动态库上更改 MyClass 的对象大小(通常通过添加成员)将是一个严重的问题!
您应该进一步阅读两个关键字:源代码兼容性,这意味着您的程序在更新库后仍将编译,以及二进制兼容性,这意味着您的编译程序在更新库后仍将正常运行。
大多数主要库(如glibc
或libpng
)在长版本范围内保持二进制兼容(通常主要版本的所有版本都是二进制兼容的),并且几乎从不破坏源代码兼容性。
有一些自动化工具可以测试二进制和源代码兼容性(例如这个)。
这个问题有两个
答案:否和是。
如果库只有次要更新,或者新功能是以向后兼容的方式添加的,则无需执行任何操作。当然,除非你想使用新功能,否则你必须修改你的代码并重新编译它。
另一方面,如果库进行了一些不向后兼容的更改,则可能至少必须重新链接项目。但是,如果您安装此类向后不兼容的库,操作系统可能会保留旧版本,因此您的应用程序可能会使用旧版本,而您不必执行任何操作。
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 我应该删除矢量<short>吗?
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 我应该在锁定TBitmap画布后解锁它吗
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 我应该避免多重实现继承吗
- 为了方便起见,我应该避免公开私有字段变量吗
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 违反const正确性:我应该现实地期待什么问题
- 我应该如何表示我拥有的连续元素序列?
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 我应该如何从 stdin C++ 中读取可变长度的格式字符串?
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 我应该如何捕捉out_of_range异常?
- 我应该声明所有不抛出 noexexcept 的成员/函数吗?
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 当库更新时,我应该重新编译程序