自制編譯器——cbc安裝後使用出問題

做個瘋狂的程式設計師發表於2020-10-23

自制編譯器——cbc安裝後使用出問題

記錄一下自己在github上的一個回答,詳細安裝步驟可以看絕雲大師的github
安裝詳解

問題描述:

kim@kim-virtual-machine:~/桌面$ cbc -Wa,"–32" -Wl,"-melf_i386" hello.cb
/usr/bin/ld: 找不到 /usr/lib32/crt1.o: 沒有那個檔案或目錄
/usr/bin/ld: 找不到 /usr/lib32/crti.o: 沒有那個檔案或目錄
/usr/bin/ld: 當搜尋用於 /usr/lib/x86_64-linux-gnu/libc.so 時跳過不相容的 -lc
/usr/bin/ld: 當搜尋用於 /usr/lib/x86_64-linux-gnu/libc.a 時跳過不相容的 -lc
/usr/bin/ld: 找不到 -lc
/usr/bin/ld: 找不到 /usr/lib32/crtn.o: 沒有那個檔案或目錄
cbc: error: /usr/bin/ld failed. (status 1)
cbc: error: compile error

問題解決:

問題已解決!
有需要的朋友可以看一下:
由於是linux新手而且在網上也沒找到訊息所以我就一步步解決問題:

1.找不到crt檔案

/ usr / bin / ld:找到/usr/lib32/crt1.o:沒有那個檔案或目錄
/ usr / bin / ld:找到/usr/lib32/crti.o:沒有那個檔案或目錄
首先通過locate crt1.o找到crt檔案的位置
/usr/lib/x86_64-linux-gnu/crt1.o
cd /usr/lib/x86_64-linux-gnu 後 發現crt檔案都在這個目錄下,再執行sudo cp /usr/lib/x86_64-linux-gnu/crt /usr/lib32/將需要的crt*檔案複製到缺失的lib32中

2.相容性問題

/ usr / bin / ld:當搜尋使用/ usr / lib / x86_64-linux-gnu /libc.so時跳過不相容的-lc
/ usr / bin / ld:當搜尋使用/usr/lib/x86_64-linux-gnu/libc.a時跳過不相容的-lc
/ usr / bin / ld:找不到-lc
原因:系統缺失32 位的靜態庫和動態庫庫檔案
執行命令:sudo apt-get install build-essential module-assistant gcc-multilib g+±multilib

綜上解決問題。
還有問題的話大家可以在下面留言

附上大佬的簡化命令方法:原文地址

新建檔案命名為cbc寫入以下內容,並新增可執行許可權,再建立軟連結到/usr/local/bin/cbc64即可

#!/bin/bash
cbc -Wa,"–32" -Wl,"-melf_i386" $1 -L /usr/lib32
編譯命令便可簡化為
cbc64 test/hello.cb
等價於
cbc -Wa,"–32" -Wl,"-melf_i386" test/hello.cb -L /usr/lib32

指令碼說明:-L引數是指定庫所在位置,/usr/lib32是我所用系統Manjaro(ArchLinux系)32位庫所在的路徑

相關文章