c++ - 链接到静态库时的多个函数调用

标签 c++ linker static-libraries

在我的 C++ 项目中,我多次调用静态库中的函数,所以我想知道链接器是否只复制该函数一次,或者每次在源代码中调用它时。

最佳答案

链接器将每个使用的函数复制一次。

为了让简短的回答变长,我将解释:

链接DLL或共享库时,没有拷贝,你的程序必须加载链接库或DLL到内存中,如果它还没有加载,并从中调用函数,静态库是不同的,因为没有依赖运行时,因此每个使用的函数都被复制到可执行文件中。

有一个异常(exception),inline 函数可以为每次使用复制,但不是作为函数而是作为代码复制。函数代码(或多或少)被复制到您的代码调用该函数的位置。它由编译器完成,而不是由链接器完成。

inline 函数是有保证的,这就像是对编译器的推荐。当您将函数声明为内联时,您通常将代码放在头文件中。编译器也可能决定一个函数是内联,即使没有声明,作为一种优化,它可能发生在函数非常短的地方。

所以结论是链接静态库时,函数只被复制一次到可执行文件中。

关于c++ - 链接到静态库时的多个函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850562/

相关文章:

ios - 几个子项目。建筑的重复符号

c++ - .o、.a 和 .so 文件有什么区别?

c++ - 成员函数的模板特化

javascript - 包含在 CSS/JS/HTML 中时如何得出正确的目录路径?

c++ - 添加库时出现 Qt 错误 - 没有创建目标的规则

ios - 如何在 Xcode 5 上找到 arm-apple-darwin#-llvm-gcc-4.2 编译器?

c++ - 跨多个源文件使用全局(多次使用 extern)

java - 无法从输入流读取字节数据

c++ - 在 boost 进程异步子进程中的 run() 之后是否需要 wait()?

c++ - 清空后减少 std::unordered_map 内存占用