openjdk源码编译踩坑

1. 在ubuntu18.04下编译openjdk源码

1.1 apt-get 无法安装libx11-dev, 换成了aptitude,结果还是安装不成功。并且发现aptitude使用不习惯,要换回apt-get,问题就出在了这里。由于需要自己下载.deb报,这时在便在搜索引擎中去搜索,导向了一些网址,然后再去下载某些deb.安装之后却发现apt还是有某些兼容问题,提示使用apt --fix-broken install去解决。执行之后还是发现某些依赖问题。无意间找到了正宗源头package.ubuntu.com,就这样一个个的去下载安装中需要的依赖包,解决了困惑了多年的apt-get自动安装不能解决的依赖问题。

1.2 由于一开始在别的站点libstdc++6高于ubuntu18.04对应(bionic (18.04LTS) )版本,这时想着把该包换成对应版本的。问题就出在了这里。 由于需要先卸载该包,可是依赖该包的包特别多,此时提示全部卸载。卸载不卸载哪?由于了好久,还是决定冒险试下。结果应用图表全部基本被搞掉了。怎么办哪?幸好当初存下来了当初要删除哪些软件包,那就一个个再恢复吧,看看能不能救活。安装过程中某些循环依赖需要借助apt-get install -f来解决。一个个的弄下来,少说有上百个被删的软件包,而且其中很多都有别的许多依赖,比如我要安a,a依赖a1,a2...,a1又依赖b1...转眼几个小时过去了,才弄好十几个,正为这巨大的工作量担忧,突然断网了,而且长时间无法恢复。锁屏吧,看看还能不能进来,也是为了以后要是能修好,重启后能不能正常进入。结果坏了,进不来了,在输入密码处光标一直闪烁,就是不能输入字符。这样只能进入其他tty了,重启后tty1也变成了只有命令行界面,一切的努力宣告白费,只剩下重装系统了。

2. 在ubuntu20.04下编译openjdk源码

重装系统后,首先试下能不能正常编译openjdk,毕竟为了它系统都搞崩了。这次整个过程还是比较顺利。

2.1 配置

bash configure --with-root-jdk=上一版本jdk路径 --diasble-warnings-as-errors  

其中--diasble-warnings-as-errors   ,必须要有,不然在make过程中会把warnings当作errors,从而编译中断。

这个过程中也提示安装libx11-dev等,顺利的安装成功了。

2.2 编译

make

持续几十分钟后,终于看到了最后一行的Finish...

进入build/**,java -version。终于看到了盼望已久的版本号信息。

3.总结

3.1 ubuntu18.04无法安装libx11-dev等包,可能是由于系统长期更新,导致内部软件包的依赖出现了兼容性问题。这时要么只看源码,不进行编译,要么在新的系统上进行尝试。

3.2 对于libstdc++6 这些基础性的包在工作环境中一定不能动,要动也要在实验环境中,否则会删除太多依赖它的软件包,导致整个环境出现严重问题。

3.3 要在正确的地方(packages.ubuntu.com)下载软件包,并且版本最好对应。