【发布时间】:2022-01-06 05:38:12
【问题描述】:
我有一个std::vector,在加载库时需要填充一些随机值。但我看到它在加载库后被重置。是不是因为global和static
库代码:
static std::vector<uint8_t> g_randomNr{};
__attribute__((constructor)) void generateRandomNrAtStart(void)
{
static bool firstLoad = false;
g_randomNr.clear();
if (!firstLoad) {
firstLoad = true;
std::cout << "Library is loaded and generating first random number ...\n";
}
std::cout << "Generating random number ...\n";
for (int i = 0; i < 20; i++) {
g_randomNr.push_back(i);
}
std::cout << "Random number generated with length of " << g_randomNr.size() << "\n";
}
void getRandomNr(std::vector<uint8_t>& randomNr)
{
randomNr = g_randomNr;
}
主要代码:
int main()
{
std::vector<uint8_t> randomNr{};
getRandomNr(randomNr);
std::cout << randomNr.size() << "\n";
return 0;
}
输出:
Library is loaded and generating first random number ...
Generating random number ...
Random number generated with length of 20
0
在上面的输出中,我希望 cout main 函数中有 20 个,但我收到的是空的 vector
【问题讨论】:
-
static std::vector<uint8_t> g_randomNr = makeRandomVector();将避免(非标准)属性,全局和该函数之间的顺序问题。
标签: c++ linux c++11 shared-libraries