我目前正在使用 USS 接口在 MVS 上移植一个应用程序。我在编译(使用 c++ 编译器)以下程序时遇到问题:
#define _XOPEN_SOURCE_EXTENDED 1
#define _OE_SOCKETS
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
struct in_addr add;
int sd = socket(AF_INET, SOCK_STREAM, 0);
inet_ntoa(add);
return 0;
}
IBM 文档指出,想要使用套接字函数的人应该定义_OE_SOCKETS
(_XOPEN_SOURCE_EXTENDED
如果它是 C++)。但我有未定义的符号套接字:
$> c++ test.cpp
"./test.cpp", line 10.12: CCN5274 (S) The name lookup for "socket" did not find a declaration.
CCN0793(I) Compilation failed for file ./test.cpp. Object file not created.
FSUM3065 The COMPILE step ended with return code 12.
FSUM3017 Could not compile test.cpp. Correct the errors and try again.
一些调查让我觉得我有一个损坏的 sys/socket.h 头文件,实际上这里是这个文件的摘录:
690: #ifndef _OE_SOCKETS /* must be __UU */
...
732: int socket (int, int, int);
...
780: #endif /* ifndef _OE_SOCKETS */
我觉得#ifndef _OE_SOCKETS
应该是一个#ifdef _OE_SOCKETS
。
谁能向我证实这一点?谢谢。
最后,uname 给出了我正在使用的盒子:
$> uname -a
OS/390 S0W1 20.00 03 2094