-static-libstdc++ GCC标志会影响Linux上生成静态库(*.a)吗?
Does -static-libstdc++ GCC flag affect the generation of a static library (*.a) on Linux
这个问题来自以下场景:
有一个静态c++库 a 和一个可执行库B,它链接到 a 。我希望B独立于c++运行时。
我知道在MSVC中,如果A是用/MD
标志编译的,那么B肯定会依赖于MSVC *.dll。
但是我对-static-libstdc++
是否在linux上对GCC起同样的作用感到困惑。
我的问题是linux上的GCC,当我编译A时,我是否需要使用-static-libstdc++
,或者它只是一个链接器标志,根本不影响A。
我相信答案是肯定的(但还没有尝试过)。
原因是代码访问动态库中的符号与静态符号(可执行文件中的符号)不同。在你的例子中,这是库A。
对于静态符号,当链接可执行文件时,这些符号被解析为内存地址。实际上,符号的名称根本不需要保存在可执行文件中(这被称为"剥离的"可执行文件)。
对于动态库中的符号,符号的名称必须出现,并且它们由可执行文件中的代码访问以加载符号(可能使用dlopen
和dlsym
等函数)
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 链接标志对静态库意味着什么
- 为什么本地静态对象的初始化使用隐藏的防护标志?
- C++11:pthreads、静态类函数和-pg标志的兼容性
- C++静态标志使可执行文件过大
- CMake:在静态库上设置一个链接器标志,供用户在链接时使用(Visual Studio)
- 向静态库编译添加标志
- 是否有任何方法可以发现静态库是用-fPIC标志编译的?
- 在g++ 5和6中使用地址消毒器和额外的asan标志进行静态初始化顺序时的错误
- -static-libstdc++ GCC标志会影响Linux上生成静态库(*.a)吗?
- ' ios_base '的标志都是静态const整型变量.为什么可以用' ios_base::setf() '来