在AIX上使用ofstream
Using ofstream on AIX
我正试图在AIXBox上编写一个简单的C++程序。程序如下:
# include <iostream>
# include <fstream>
using namespace std ;
int main()
{
ofstream of ;
of.open("license.txt") ;
of<<"hello"<<endl ;
of.close() ;
}
我的LDFLAGS设置如下:
-maix64 -L/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/ppc64
-L/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/ppc64
-L/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1
-L/disk3/TOOLS/OPENSSL/lib
CFLAGS是:
-O2 -maix64 -I/disk3/TOOLS/OPENSSL/include -D_ALL_SOURCE -D_XOPEN_SOURCE
-D_XOPEN_SOURCE_EXTENDED -DSS_64BIT_SERVER -D_POSIX_SOURCE -D__64BIT__
-I/disk3/TOOLS/OPENSSL/include -I/usr/include
-I/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/include
这个程序编译得很好。但当我尝试运行相同的程序时,程序会出现分段错误。我用gdb运行了同样的程序,在使用流时发现了以下问题:
Program received signal SIGSEGV, Segmentation fault.
0x09000000036107c4 in std::locale::operator=(std::locale const&) (this=
findvar.c:706: internal-error: value_from_register: Value not stored anywhere!
你知道为什么会发生这种事吗?感谢您的帮助:)
注:fstream本身工作。。。
我遇到了同样的错误。修复错误的关键点是:1在共享库中使用std::stream(如std::of stream);2在共享库中使用pthread函数(如pthread_self);3使用"-O2"来优化代码。然后显示"分段故障(堆芯转储)"。
AIX提供了两个版本(64位)的libstdc++.a(请参阅http://www.perzl.org/aix/index.php?n=Main.GCCBinariesVersionNeutral)64位编译,非线程安全(<prefix>/ppc64
)64位编译,线程安全(<prefix>/pthread/ppc64)
我的解决方案是:将LIBPATH更改为使用"<prefix>/pthread/ppc64"
版本。例如将LIBPATH设置为"/opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.6.1/pthread/ppc64/"
它在我的机器上运行良好。
这已经有一段时间了,但我突然想到:难道不需要将-pthread
添加到编译/链接选项中吗?
我已经分析了这个问题并找到了解决方案。
以下是我所做的:
我对我的testprog可执行文件做了ldd:
ldd test
test needs:
/usr/lib/threads/libc.a(shr_64.o)
/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/pthread/ppc64/libstdc++.a(libstdc++.so.6)
/disk3/TOOLS/GCCTools/gcc-4.5.1/lib/gcc/powerpc-ibm-aix6.1.0.0/4.5.1/pthread/ppc64/libgcc_s.a(shr.o)
/unix
/lib/libcrypt.a(shr_64.o)
/lib/libpthreads.a(shr_xpg5_64.o)
我发现pthread的libstdc正在被使用。这是由于我的LIBPATH在/usr/之前有此路径
接下来,我重置LIBPATH,以排除所有使用pthread的gcc的路径,确保在LIBPATH 中可用的地方使用其他gcc库
最后,我用这个新的LIBPATH 编译了测试程序
注意:linux使用LD_LIBRARY_PATH,AIX使用LIBPATH。
干杯!
- std::ofstream 作为类成员删除复制构造函数?
- ofstream::close() 是否在 Linux 上调用同步?
- 如何在软件代码中使用ofstream创建文件
- Ofstream和IFSTREAM有什么区别?
- 使用 libssh 从 SFTP 服务器下载文件并使用 C++ 将其写入 ofstream?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- fstream / ifstream / ofstream 对象如何转换为布尔值
- 使用 auto_ptr<std::ofstream> 对象
- AIX C++映射编译问题
- 传递数组结构、ofstream 和 interger 以运行
- 有没有办法使用 ofstream 保存屏幕截图?
- AIX编译器13.1.3对c++进行了不正确的双重转换
- 使用 ofstream 写入文本文件时断言失败
- 当 ofstream 指针位于 std::map 中时,文件写入不会发生 C++.
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- 如何将 std::ofstream& 传递给函数参数?
- BigInteger:在 C++ 中使用 ofstream 写入文件时如何将基数更改为 2?
- 数据不是用 ofstream 写入的,即使返回成功也是如此
- ofstream将额外的零字节写入Unix服务器上的文件
- 在AIX上使用ofstream