Solaris 11.4系统头文件阻止使用stlport4库 使用任何Solaris Studio编译器使用一行C++程序,当使用-Bools= STLPOT4选项时,Solaris 11.4会出现错误。
你好,cppSolaris 11.4系统头文件阻止使用stlport4库 使用任何Solaris Studio编译器使用一行C++程序,当使用-Bools= STLPOT4选项时,Solaris 11.4会出现错误。,c++,build,solaris,C++,Build,Solaris,你好,cpp #include <iostream> int main() { std::cout << "Hello world" << std::endl; return 0; } $ /opt/solarisstudio12.4/bin/CC -m64 hello.cpp -o hello -library=stlport4 "/opt/solarisstudio12.4/lib/compile
#include <iostream>
int main()
{
std::cout << "Hello world" << std::endl;
return 0;
}
$ /opt/solarisstudio12.4/bin/CC -m64 hello.cpp -o hello -library=stlport4
"/opt/solarisstudio12.4/lib/compilers/include/CC/stlport4/stl/_stdio_file.h", line 161: Error: __pad is not a member of const __FILE.
"/opt/solarisstudio12.4/lib/compilers/include/CC/stlport4/stl/_stdio_file.h", line 163: Error: __pad is not a member of const __FILE.
"/opt/solarisstudio12.4/lib/compilers/include/CC/stlport4/stl/_stdio_file.h", line 165: Error: __pad is not a member of const __FILE.
"/opt/solarisstudio12.4/lib/compilers/include/CC/stlport4/stl/_stdio_file.h", line 165: Error: __pad is not a member of const __FILE.
#包括
int main()
{
标准::cout
64位应用程序不应依赖于访问文件
数据结构的成员。尝试直接访问专用实现特定的结构成员可能会导致编译错误。现有32位应用程序不受此更改的影响,但应删除对这些结构成员的任何直接使用从所有代码
在Solaris上执行64位编译时,您无法访问文件
结构。但是,如果您编译32位二进制文件,它应该可以工作
为什么孙这样做
因为Sun(现在是Oracle,至少有一段时间)提供:
在Solaris 2.6或更高版本上构建的二进制应用程序,它使用了stability.5中定义的操作系统接口,可在Oracle Solaris的后续版本(包括其初始版本和所有更新)上运行,即使尚未为这些最新版本重新编译应用程序也是如此
这是Oracle的保证。Sun很久以前的保证实际上更有力,几乎可以说如果您的代码经过编译,以后对Solaris的任何更新都不会破坏它
早期版本的Solaris只有一个8位字段用于文件
的关联文件描述符。该文件描述符字段可见,构建在早期版本Solaris上的代码使用了它
因此Sun在文件
结构中为文件描述符保留了一个8位字段
但那是三十多年前的事了——在64位处理器出现之前
而且没有遗留的64位二进制文件,Sun不得不担心它们是二进制的
由于Sun只保证了二进制兼容性,因此Sun将新的64位文件
结构不透明,因此没有兼容的代码可以访问它。(是的,Sun在20世纪90年代初提供了64位系统。杀死了一家伟大的创新公司。)
Sun确实提供了可供需要同时打开256个以上文件的程序使用的:
扩展文件工具允许32位进程在标准I/O中使用任何有效的文件描述符(请参阅stdio(3C))C库函数。历史上,32位应用程序仅限于使用前256个数字文件描述符用于标准I/O流。通过使用扩展文件功能,此限制被取消。任何有效的文件描述符都可以用于标准I/O
在:
extendedFILE.so.1是一个过时的空库,仅用于二进制兼容
它以前的用途是,对32位二进制文件使用大于255的文件描述符,现在是Oracle Solaris中的默认行为
libc库现在处理最初由extendedFILE.so.1处理的环境变量
底线是,如果要在Solaris上访问64位文件
结构,您将无法执行此操作。
64位应用程序不应依赖于访问文件
数据结构的成员。尝试直接访问专用实现特定的结构成员可能会导致编译错误。现有32位应用程序不受此更改的影响,但应删除对这些结构成员的任何直接使用从所有代码
在Solaris上执行64位编译时,您无法访问文件
结构。但是,如果您编译32位二进制文件,它应该可以工作
为什么孙这样做
因为Sun(现在是Oracle,至少有一段时间)提供:
在Solaris 2.6或更高版本上构建的二进制应用程序,它使用了stability.5中定义的操作系统接口,可在Oracle Solaris的后续版本(包括其初始版本和所有更新)上运行,即使尚未为这些最新版本重新编译应用程序也是如此
这是Oracle的保证。Sun很久以前的保证实际上更有力,几乎可以说如果您的代码经过编译,以后对Solaris的任何更新都不会破坏它
早期版本的Solaris只有一个8位字段用于文件
的关联文件描述符。该文件描述符字段可见,构建在早期版本Solaris上的代码使用了它
因此Sun在文件
结构中为文件描述符保留了一个8位字段
但那是三十多年前的事了——在64位处理器出现之前
而且没有遗留的64位二进制文件,Sun不得不担心它们是二进制的
由于Sun只保证了二进制兼容性,因此Sun将新的64位文件
结构不透明,因此没有兼容的代码可以访问它。(是的,Sun在20世纪90年代初提供了64位系统。杀死了一家伟大的创新公司。)
Sun确实提供了可供需要同时打开256个以上文件的程序使用的:
扩展文件工具允许32位进程在标准I/O中使用任何有效的文件描述符(请参阅stdio(3C))C库函数。历史上,32位应用程序仅限于使用前256个数字文件描述符用于标准I/O流。通过使用扩展文件功能,此限制被取消。任何有效的文件描述符都可以用于标准I/O
在:
extendedFILE.so.1是一个过时的空库,仅用于二进制兼容
它以前的用途是,对32位二进制文件使用大于255的文件描述符,现在是Oracle Solaris中的默认行为
libc库现在处理最初由extendedFILE.so.1处理的环境变量
底线是,如果您想访问Solaris上的64位文件
结构,您不会成为