如果在功能之外定义,则ofStream :: open()的segfault

Segfault on ofstream::open() if defined outside of function

本文关键字:open segfault ofStream 功能 定义 如果      更新时间:2023-10-16

我正在编写一个小的共享库来通过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 

这是因为__attribute__((constructor))。在全局变量std::ofstream log_file初始化之前,请调用ctor函数,从而导致segfault。