C 静态类成员未在 *静态库 *中初始化

C++ static class member not initialized in a * static library *

本文关键字:静态 初始化 静态类 成员      更新时间:2023-10-16

我目前正在面临C 的烦人问题。

实际上,我什至不明白为什么我在过去20年中没有面对它:(

在我当前的上下文中,我们大量使用C 可执行文件(主要在Linux嵌入式系统中) stat上与我们的专有静态LIB链接在一起。而且我们确实出于技术和优化原因使用静态液体。

在过去的几年中,确实,我曾经创建共享的lib ...

所以我开始与静态课程成员一起写一些课程。如下:

class Inner
{
public:
   Inner()
   {
     std::cout << "CTOR Inner" << std::endl;
   }
};
class A
{
static Inner _inner;
...
};
// in the .cpp
Inner A::_inner;
///////////////////////

非常基本的用例,不是吗?

但是在与LIB相关的单位测试中,我在控制台中看不到std::cout语句。鉴于,如果我将我的课内内部和a移动到可执行的源代码中...

都可以。

我确定这是一个非常基本的问题,我意识到过去几年我从未面临过。这是与编译器有关的问题吗?请注意,我在Windows和Linux上测试了两个案例(Debian,GCC 4.9)。

欢迎任何想法。

z。

您必须实际使用:: _内部或不包括代码的那一部分。要么在该文件中使用其他内容。链接器不必在不使用的翻译单元中链接,即使它们具有可观察到的副作用。

如何强制包含"未使用"库中的对象定义