gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:04 25 4
gpt4 key购买 nike

我目前正面临一个恼人的 C++ 问题。

其实,我什至不明白为什么我在过去的20年里没有面对它:(

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

在过去的几年里,的确,我曾经创建过共享库...

于是开始写一些静态类成员的类。例如:

class Inner
{
public:
Inner()
{
std::cout << "CTOR Inner" << std::endl;
}
};

class A
{
static Inner _inner;

...
};

// in the .cpp

Inner A::_inner;

///////////////////////

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

但在我的单元测试中,与 lib 链接,我无法在控制台中看到 std::cout 语句。然而,如果我将我的类 Inner 和 A 移动到可执行源代码中......它工作正常。

我确信这是一个非常基本的问题,而且我意识到我在过去几年中从未遇到过。这是与编译器有关的问题吗?请注意,我在 Windows 和 Linux(Debian、Gcc 4.9)上测试了这两种情况。

欢迎任何想法。

Z.

最佳答案

您必须以某种方式实际使用 A::_inner,否则将不会包含该部分代码。要么在那个文件中使用其他东西。链接器不必链接从未使用过的翻译单元,即使它们会有明显的副作用。

How to force inclusion of "unused" object definitions in a library

关于C++ 静态类成员未在 * 静态库中初始化 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com