c++linux中的静态链接用法:每次更改库时,是否需要重新编译所有内容
Static linkage usage in c++ linux: do I need to recompile everything each time I change library?
我有一个程序,它在编译(使用eclipse-cdt)时使用-L(mylib.a)静态链接到linux中的另一个库。
据我所知,链接是静态的这一事实意味着库被插入到我的二进制文件中。这是否意味着,如果我对mylib进行更改,我需要重新编译二进制文件?我想是的,但我想确定一下,因为这是一个很大的时间开销。请注意,如果对mylib进行了更改,那么eclipse会识别出需要重新编译它,但它不会识别出二进制文件本身需要重新编译,即使它链接到了mylib。
如果不更改库的接口(即头),只需重新链接即可。
是的,您应该用修改后的库重新生成代码,以生成链接到新的和更新的库的二进制文件。
项目的构建可以分为两个里程碑阶段:
编译:
在此阶段,编译器编译每个翻译单元。它检查源代码的有效语法等,并生成对象文件。这些对象文件包含源代码的程序集代码输出。
链接:
在此阶段,链接器将对象文件和库链接在一起以生成可执行文件。
当应用程序或项目使用静态库时,它包括头文件,通常称为库接口,其中包含应用程序使用的api和其他构造的列表。应用程序还需要链接到库文件。
显然,如果接口完好无损,即应用程序包含的库头文件没有变化,则不需要编译,只需要链接到更新的库即可。
然而,我不认为有一种方法可以通过eclipseIDE重新链接更新的库,所以你应该重建你的项目,这基本上可以完成必要的工作
即:
重新编译您的项目并将新库重新链接到该项目或
只需将新库重新链接到您的项目即可。
相关文章:
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 如何编译:Mac上的Synergy(2017年的新工具链)
- 如何编译和运行一个新的 C++ Actor 框架项目?
- C++编译新的警告过滤器
- 每次都构建(make)lib,只有在lib较新时才重新编译项目
- 如何创建指向派生类的新指针,该派生类在C++编译时未知
- 如何在不退出和失去断点的情况下重新加载重新编译的二进制文件
- 在编译时将整数和分数部分宏组合成一个新的宏或双精度
- C++运算符新重载、编译错误
- 在新OSX上编译旧碳应用
- 代码块在尝试编译或创建新文件时出现"An assertion failed!"错误
- 在新的Visual Studio项目中包含任何Eigen 3.3.1文件将无法编译
- RCpp:如何在不重新启动R的情况下重新加载重新编译的C++代码
- 新安装的MinGW问题与编译和可执行文件
- 重新编译二进制类或派生类,以便在基类中添加新方法
- 添加新库以编译任何术语.如何编辑生成文件
- C++,如果其他新文件出现问题,使用g++进行编译可以很好地工作
- 每次添加新的源子文件夹时,Cmake都会重新编译所有内容
- 不完整类型的新内容在包装在模板中时编译
- 使用新的 Qt5 信号/插槽机制连接 QTcpSocket::error() 时编译错误