在MacOS下使用lemon評測


lemon算是一個非常好用的評測軟件吧。最近又有了評測代碼的需求,而之前使用lemon都是在Windows下,自己的Mac並沒有裝雙系統,於是就想着有沒有辦法在在Mac上使用。

好在lemon是基於Qt的開源軟件,而Qt本身是跨平台的,可以說希望是相當大的。一番操作之后,總算搞定了。

參考資料: https://blog.csdn.net/huzecong/article/details/9422843

第零步:安裝Qt

想必大家安裝的是比較新的Qt5吧。在安裝Qt之后,找到qmake,把它加入$PATH。

第一步:下載lemon的源碼

https://github.com/Sojiv/Project_lemon
直接git clone即可。

第二步:更改環境

1.將所有Q_OS_LINUX改為Q_OS_MAC

2.重新編譯watcher_unix

gcc watcher_unix.c -o watcher_unix

第三步:將代碼遷移到Qt5

1.在lemon.pro內加入以下兩句話

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

這時候qmake lemon.pro應該就可以通過了。

2.修改頭文件&更新函數參數

命令行make,之后會報各種錯。

1.報出QtGui/QWidget或者QtGui/QApplication找不到,解決方法是把QtGui刪掉,直接#include<QApplication>#include<QWidget>

2.報出某個類incomlete或者undefined,解決方法是在頭文件里補充include一些內容。命名都很規律所以也不用怎么查,哪個類不行就包含哪個。

E.g.

#include<QMessageBox>
#include<QPushButton>
#include<QFileDialog>
...

還有可能報出一些奇妙的錯誤,解決方法也是加頭文件

3.報出沒有setResizeMode函數,改為setSectionResizeMode即可。

4.報出...::UTF8這個東西沒有定義,但Qt5已經默認UTF8了,所以直接刪掉這個參數即可。

5.報出沒有toAscii函數,改成toLatin1即可。

6.報出有個構造函數中Type類型沒有定義,這個在Qt5中被deprecated了,直接注釋掉對應的構造函數(聲明和實現)即可。

第四步:修復內存消耗的錯誤

這時候應該就得到了一個lemon了,可以打開試試。不知道什么原因,在我的機子上並不能打開以前Windows上留下的cdf文件,會秒退。但是新建的可以正常使用,之前的重新開一個就行了,所以也不影響。

但是很快發現了問題,就是內存消耗非常奇怪,動不動爆個負數出來,肯定有問題。

關於評測的代碼在judgingthread.cpp里面,具體的監視活動則是包給了watcher_unix。一番調查之后發現了問題所在:watcher_unix會開一個線程監視它使用的內存,具體的內存應該是rusage結構體中的ru_maxrss這個值。這個值的單位貌似是沒有嚴格規定的,在某個linux的標准中規定是kB,但實際測試發現是B,可能是Mac下不一樣?於是將watcher_unix.c中ru_maxrss后跟着的*1024給刪掉,重新編譯,這樣就能得到正常的內存了。

然而這時的lemon還是不能正常報內存超限,明明內存比限制大,依舊顯示答案正確。仔細檢查之后,發現代碼里只判斷了線程被kill或者Terminate時候是內存超限,但是並沒有加上資源使用的限制。內存超限的code是4,一個解決方法是將judgeingthread.cpp中if(code == 4)那個部分更改為:

if (code == 4 || memoryUsed > 1LL * memoryLimit * 1024 * 1024) {
    delete runner;
    score = 0;
    result = MemoryLimitExceeded;
    if (code == 4) memoryUsed = -1;
    return;
}

這樣就可以了,還能在超限的時候顯示使用了多少內存。

第五步:更改圖標

重新編譯的lemon應該算是可以用了,但圖標不對,沒有靈魂。改圖標很簡單,按照這里所說的做就行了。

就是在Mac下的風格比較奇怪。

我的系統版本是macOS10.15 Catalina, Qt版本是比較早的Qt5.12.5。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM