如果在函数外部定义了ofstream :: open()的段错误[重复]

问题描述 投票:0回答:1

我正在编写一个小的共享库来通过LD_PRELOAD测试一些东西,我想将日志写入文件。

以下代码有效:

void ctor() __attribute__((constructor));
void dtor() __attribute__((destructor));

void ctor() {
  std::ofstream log_file;
  log_file.open("/home/tristan/Test.log");
  log_file << "Log Stuff..." << std::endl;
  log_file.close();
}

这会导致Segfault:

void ctor() __attribute__((constructor));
void dtor() __attribute__((destructor));

std::ofstream log_file;

void ctor() {
  log_file.open("/home/tristan/Test.log");
  log_file << "Log Stuff..." << std::endl;
  log_file.close();
}

这是为什么?或许与构造函数属性有关?

我的GCC标志如下:

gcc -fPIC -m64 -shared -lstdc++ -o Test.so *.cpp 
c++ linux fstream ofstream
1个回答
2
投票

这是因为__attribute__((constructor))。在全局变量ctor初始化之前调用std::ofstream log_file函数,因此导致段错误。

© www.soinside.com 2019 - 2024. All rights reserved.