- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Windows SDK v7.1 从 Windows 7 计算机上的源代码编译 OpenJDK 6。
经过一些调整后,我真的不知道该怎么做。
第 47 行和第 49 行:
static int POLLIN = 1; // line 47
static int POLLCONN = 2;
static int POLLOUT = 4; // line 49
问题是包含的文件winsock2.h有以下代码:
#if(_WIN32_WINNT >= 0x0600)
/* Event flag definitions for WSAPoll(). */
#define POLLRDNORM 0x0100
#define POLLRDBAND 0x0200
#define POLLIN (POLLRDNORM | POLLRDBAND)
#define POLLPRI 0x0400
#define POLLWRNORM 0x0010
#define POLLOUT (POLLWRNORM)
#define POLLWRBAND 0x0020
#define POLLERR 0x0001
#define POLLHUP 0x0002
#define POLLNVAL 0x0004
typedef struct pollfd {
SOCKET fd;
SHORT events;
SHORT revents;
} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
#endif // (_WIN32_WINNT >= 0x0600)
请注意,winsock2 如何#定义 POLLIN
和 POLLOUT
,而 WindowsSelectorImpl.c 将它们声明为 const。更糟糕的是,两者都给出不同的值:
OpenJDK:
POLLIN = 1
POLLOUT = 4
WinSock2(Windows SDK v7.1):
POLLIN = 0x300
POLLOUT = 0x10
显然,OpenJDK 代码不应该在 Windows 7 上编译。
但是,我确实想在 Windows 7 上编译它。
其中一个选项是安装较旧的 Windows SDK。另外就是改文件WindowsSelectorImpl.c,问题是怎么改?我的目的是重命名常量,但我不禁想知道 WinSock2 #defining 具有完全相同名称但不同值的常量...
有什么建议吗?
编辑1
再想一想,也许我最好有条件地使用 WinSock2 中的值?我的意思是值的变化可能意味着 API 的变化。
WinSock2.h 定义 pollfd 如下:
typedef struct pollfd {
SOCKET fd;
SHORT events;
SHORT revents;
} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
与 WindowsSelectorImpl.c 对比:
typedef struct {
jint fd;
jshort events;
} pollfd;
前者与后者向后兼容(或多或少,不考虑对齐)。
因此,WinSock2 常量有可能是适合 Windows 7 的常量,但是如何处理 POLLCONN
呢?代码如何在 Windows 2003 或 XP 上运行?
编辑2
事情更糟,因为 C 实现在 java 中有一个匹配的对应项 - http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/tip/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java ,它使用与 C 代码相同的常量。
我不明白。 Windows 7 上的winsock2 是否会破坏为Windows 2003 SP1 上的winsock2 编写的任何代码?
编辑3
检查了 jdk7u 源( WindowsSelectorImpl.c 和 AbstractPollArrayWrapper.java )。它使用重命名方法,这意味着即使 Windows SDK v7.1 使用不同的值声明 POLLIN 和 POLLOUT,jdk7 仍坚持 jdk6 的实现。
我真的不知道这是什么意思,但我不会比教皇更天主教。
最佳答案
解决方案很简单,但很烦人 - 获取 Visual Studio 2003 并使用它来编译 OpenJDK。最困难的部分是获得VS2003本身,其余的都很容易。
关于windows - 使用 Windows SDK v7.1 从 Windows 7 上的源代码编译 OpenJDK 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13924376/
首先我觉得奇怪的是 OpenJDK project page 上没有错误跟踪器的链接。 ,然后我找到了bugs.openjdk.java.net ,但仅适用于经过认证的项目成员。象牙塔之外的人如何贡献
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
openjdk-7-jre-headless 和 openjdk-7-jre 有什么区别。 当我在 Ubuntu 的终端中输入 java 时,它提示 openjdk-7-jre-headless 而不
我无法理解 Java JRE 的一些基础知识。 我需要在嵌入式系统中运行 Java 代码,为此我需要在 Linux 内核中安装一个最小的 Java 运行时环境,也就是说,执行 Java 二进制文件所需
我正在使用 Redhat 6,我正在使用 java 1.6,因为我需要使用 java 1.6。我使用更新我的红帽yum update 和 openjdk 1.8 已自动安装。我尝试使用 删除 open
我在 Windows 上开发,在 Linux 上部署。我找不到windows和linux版本相同的OpenJdk。因此,我为 Windows 安装了 openjdk_1.7.0_u80-unoffic
Wildfly 13 和 Wildfly 14 支持哪些 OpenJDK 版本?有人可以向我提供支持矩阵吗? 最佳答案 我使用 WildFly 14 和 Open JDK 11 - 到目前为止没有任何
需要使用需要openjdk7的程序。运行 Debian 9 Mate。 当我尝试安装时获取以下内容 $sudo apt-get install openjdk-7-jre openjdk-7-jre-
我正在使用带有 heroku 插件的 IntelliJ 14,并且成功连接到 heroku。但是我无法对 heroku 进行更改。 我的应用程序使用 grails 2.5 和 Java 8。 似乎 h
在最近的许多情况下,但现在我尝试使用安装程序,它会抛出错误并显示“Java 未安装”之类的内容,即使 JAVA_HOME 设置为 Windows 10 64x 的 AdoptOpenJDK 安装程序安
我使用存储库 ppa:openjdk-r/ppa 在 ubuntu 14.04 LTS 上安装 openjdk-8-jre-headless。从今天早上开始一切正常,但现在安装因错误消息而中断 ope
这个问题在这里已经有了答案: Difference between openjdk-6-jre, openjdk-6-jre-headless, openjdk-6-jre-lib (2 个回答) 关
根据 https://github.com/docker-library/docs/blob/master/openjdk/README.md#make-jvm-respect-cpu-and-ram
我正在使用 IKVM 将 java 应用程序包装到 dll 中。我对 IKVM 不是特别熟悉,所以我提前为没有提供足够的信息表示歉意。无论如何,我正在使用一个 C# 库来调用 IKVM 创建的 dll
当我安装 netbeans 时,它让我可以选择 java 环境,我有 3 个选项,oracle java 和这两个(java-1.7.0-openjdk-i386 和 java-7-openjdk-i
使用brew和/或brew cask安装java 8和sbt显然是可能的,我遇到的问题是,brew 将 java 13 安装为 sbt 依赖项, 而且我不知道返回到默认 java 8 的一般方法,因为
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我已经在 Ubuntu 机器上运行这个旧的 Caucho Resin (4.0.41) 很多年了。我需要停用该服务器,因此我尝试在新的 Ubuntu 18.04.4 服务器上设置树脂 4.0.64,经
我刚刚开始使用 Playframework (Java) 开发一个应用程序,我认为使用支持 Playframework 的 Heroku 测试它是个好主意。 在 Heroku 上 Playframew
我尝试安装支持 Java 11 的最新稳定 Jenkins 版本。因此,在安装 Java 11(JDK) 后,我收到 Jenkins 的错误,指出发现了不正确的 java 版本。 因此卸载了 Java
我是一名优秀的程序员,十分优秀!