如果在功能之外定义,则ofStream :: open()的segfault
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();
}
这会导致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。
相关文章:
- C++中带有List类的迭代器Segfault
- 使用Vulkan hpp vk::enumerateInstanceVersion()会导致segfault
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- std::partition segfault issue
- OpenSSL: EC_POINT_set_compressed_coordinates_GFp segfault
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- POSIX open() 挂在 SMB 共享上
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 检查nullptr是否100%保护内存布局不受segfault影响
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- OpenCV Tracker 属性访问在 ARM 上因 SEGFAULT 而失败,但在 X86_64 中工作
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 为什么优化大型 std::vector 数组会导致 SegFault?
- C++segfault,可重复的例子
- 带有zip_source_buffer的libzip会导致数据损坏和/或segfault
- 导致SegFault C++的析构函数
- 从引用的Vector获取SEGFAULT
- VS 2017 C++ - "cannot open source file 'sqlite3.h' "
- 如果在功能之外定义,则ofStream :: open()的segfault