[oj维护日记]HUSTOJ添加已支持的语言

        仅针对已提供支持的语言,这些语言都已经在最新版中写好了相关调用代码,对于其中的绝大部分,最多只需安装一个编译器即可在OJ上运行。

        如需添加其它语言,请参考官方wiki:AddProgrammingLanguage.wiki


        先确认/home/judge/etc/judge.conf 文件最先面的 OJ_LANG_SET 中有没将你想要添加的语言编号加进去(对应编号已在下面给出)。确认好之后就可以安装这些语言了。


C:(编号0)

        无需安装,ubuntu自带gcc。如需更新:

sudo apt-get install gcc -y


C++:(编号1)

        无需安装,ubuntu自带g++。如需更新:

sudo apt-get install g++ -y


Pascal:(编号2)

        安装free pascal即可:

sudo apt-get install fpc -y


Java:(编号3)

        安装jdk即可(此处为了方便,直接安装openjdk):

sudo apt-get install openjdk-7-jdk -y


Ruby:(编号4)

        这个可能会遇到一点坑。首先要安装Ruby编译器:

sudo apt-get install ruby2.0 -y

        (上面那条语句如果把ruby2.0换成ruby,可能会出问题,详情可自己试...)

        如果装完后,在OJ里提交题目能正确输出,那么恭喜!你的ruby能正常使用了,如果不能,请继续往下看。

        如果提交后提示运行错误(Run Time Error),且点进去后提示用了禁用的系统调用,可以通过添加系统调用的方式进行修正,添加系统调用可见 HUSTOJ添加系统调用

        如果提交后提示答案错误(Wrong Answer),且点进去查看错误比对(需要在db_info.inc.php中开启,不会看错误比对的也可以通过测试运行查看自己的程序在OJ上编译后有没输出)后发现自己的程序没输出,则需要通过调试来追踪错误原因,调试方式如下:

        在桌面创建一个Main.rb文件,将你的代码放进去。然后打开终端进入桌面文件夹用 ruby Main.rb 执行一下,若能正常输出结果,则说明ruby编译器没什么问题

        接下来开始调试,在终端输入sudo judge_client run_id file_id  /home/judge -debug (其中run_id为你需要调试的运行id,file_id为你需要把调试过程中产生的文件放在编号为几的run目录中),假设我需要测试运行编号为 6869 的提交,并将调试中产生的文件放到/home/judge/run0 目录下,并以此为例进行操作。

先输入

<pre class="plain" name="code">sudo judge_client 6869 0 /home/judge -debug
 

然后系统就会重判6869这个提交,这时你的user.out里应该什么都没有,可以打开error.out查看错误原因,如果提示找不到某个库文件,需要先在Ubuntu里搜索这个库:

find / -name filename (filename为缺失的那个库文件的名字),找到后记住目录位置,并在~/husoj/hustoj-read-only/core/judge_client/judge_client.cc 的copy_ruby_runtime函数中加入对应的mkdir和cp语句,这样在判题时就会将缺失的库复制到所运行的目录下了。修改完保存后别忘了了执行~/husoj/hustoj-read-only/core 目录下的 make.sh 重新编译下:

sudo bash ~/husoj/hustoj-read-only/core/make.sh

然后清空 /home/judge/run0 目录:

sudo rm /home/judge/run0/* -rf

重新进行调试:

sudo judge_client 6869 0 /home/judge -debug

如果还是缺少库,重复执行上一步,如果变成了“Failed to create timer thread (errno: 11)”,则在judge_client.cc中的大概1503行加入“Case 4:” ,如下图所示

保存退出后依旧别忘了重新编译下:

sudo bash ~/husoj/hustoj-read-only/core/make.sh

再次进行调试

sudo judge_client 6869 0 /home/judge -debug

如不出意外,此时查看error.out应该是RE了,如果是RE,则按照添加系统调用的步骤去添加缺失的callid,解决完RE后,整个问题应该也就解决了。

------------------------------------------------------------分割线---------------------------------------------------

        调试过程中还可以使用chroot在run目录下模拟执行Main.rb协助调试:

sudo chroot /home/judge/run0
./ruby Main.rb


Bash:(编号5)

        Ubuntu自带。如需更新:

sudo apt-get install bash -y


Python:(编号6)

        Ubuntu自带。如需更新:

sudo apt-get install python -y

        需要注意的是,若要系统支持python,需要每次启动ubuntu后手动启动一次judged,否则判题会答案错误。需要每次开机后在终端执行以下操作:

sudo pkill -9 judged
sudo judged


PHP:(编号7)

         装HUSTOJ时一定会装的东西。如需更新:

sudo apt-get install php5 libapache2-mod-php5 -y


Perl:(编号8)

         Ubuntu自带。如需更新:

sudo apt-get install perl -y


C#:(编号9)

        装OJ时会自动装上MONO,因此可以直接使用。如需更新:

sudo apt-get install mono-gmcs -y


Objuctive-C:(编号10)

        还未装好,先留个坑。


FreeBasic:(编号11)

        未装,留个坑。


Scheme:(编号12)

        未装,留个坑。


Lua:(编号15)

        装上即可用:

sudo apt-get install lua5.2 -y


Swift:(编号16)

        暂时还不支持。







  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值