如果在函数外定义,ofstream::open() 上的段错误
Segfault on ofstream::open() if defined outside of function
我正在编写一个小的共享库来通过 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();
}
这会导致段错误:
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))
。 ctor
函数在全局变量 std::ofstream log_file
初始化之前调用,因此导致段错误。
我正在编写一个小的共享库来通过 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();
}
这会导致段错误:
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))
。 ctor
函数在全局变量 std::ofstream log_file
初始化之前调用,因此导致段错误。