您的位置:首页 > 运维架构

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

2015-05-27 17:52 274 查看
仅针对已提供支持的语言,这些语言都已经在最新版中写好了相关调用代码,对于其中的绝大部分,最多只需安装一个编译器即可在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)

暂时还不支持。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: