⑴ 關於交叉編譯工具鏈的問題
核心轉儲是崩潰報告的一個過程,他只是把當前崩潰的信息轉存出來方便差錯。而且這個核心轉儲幾個字也不過是個提示輸出信息。這個提示不會給與任何與錯誤相關的內容,必須看其他的錯誤信息或者他轉儲出來的東西來分析。
不過核心轉儲,應該是程序運行出錯而崩潰。這種問題出現在你正在運行的程序,而不是編譯過程出現的編譯錯誤(也就是說,出現核心轉儲應該就是 GCC 或者他調用的程序自己崩潰了)。出現這個問題的原因很多。
如果是因為沒有找到某些 header 文件,不應該是核心轉儲錯誤,而是編譯器或者某個過程提示錯誤信息後退出,他會輸出錯誤信息告訴你問題所在。
至於你編譯的這些東西版本都比較老,我建議還是嘗試降級整個系統來編譯、運行你現在的這些東西。或者升級你這個交叉編譯工具鏈到當前主流的版本來用。
至於交叉工具連當中的 GCC 和你當前本機的 GCC,完全是兩個互相獨立的 GCC 。
只是他們編譯輸出的二進製程序針對的指令集不同而已。相對的 binutils 和 glibc 和 kernel-header 都是一樣的意思,針對目標而輸出的相關程序。當然 glibc 和 kernel-header 主要是以「數據」方式存在,gcc 和 binutils 主要是以可以運行的程序方式存在(當然不是絕對的,比如 gcc 還會提供幾個 lib 相關的內容,不過大部分情況下你可以這么理解更直觀了解他們的作用)。
一般說來 GCC 是編譯器,binutils 是連接器,glibc 是標准 C 庫(主要是連接時,連接器必須有目標的函數庫文件,也就是 .so 文件,對應 Windows 是 .dll 文件。連接器把函數調用正確的掛接到對應的函數入口上)。linux header 就是 C 語言常見的 C header 文件和相關的開發數據。一般主要用來編譯 glibc ,glibc 作為中間層來提供內核相關調用。當然程序有些時候也會直接調用內核函數,這樣這些程序在編譯時也需要 kernel 的 header 。
這兩套東西一個輸出你當前 PC 的程序,一個輸出 ARM 的程序。兩個 GCC 套裝之間不能互相替換。只能自己輸出屬於自己的程序。
但是這兩套程序雖然輸出的程序不同,但可以運行的部分,卻都是在你的計算機上運行。而且你本機的 GCC 因為可以輸出本機的程序。所以你需要用他來輸出在你本機運行,但是卻輸出 ARM 程序的 GCC 套裝。
這就好比兩個錘子,一個錘子用來打鐵,一個錘子用來打錫。用途不同,但這兩個錘子都是鐵做的。
你作這個交叉編譯工具鏈,就是用你手裡已經有的打鐵的錘子,打出一個用鐵製作的用來打錫的錘子。這個打錫的錘子是不能打鐵的,同樣這個打鐵的錘子是不能用來打錫的。
⑵ 交叉編譯busybox顯示libc.so.6丟失!
拷貝C 庫
交叉應用程序的開發需要用到交叉編譯的鏈接庫,我們在移植應用程序到我們的目標板的時
候,需要把交叉編譯的鏈接庫也一起移植到目標板上,這里我們用到的交叉工具鏈的路徑是
/usr/local/arm/...../,鏈接庫的目錄是/usr/local/arm/...../arm-linux/lib,將其中部分庫文件及符號鏈接拷貝到root_nfs(你創建的busybox的根目錄)文件夾下的lib文件夾中。
部分庫文件及符號鏈接有:ld-2.3.2.so,ld-linux.so.2,libc-2.3.2.so,libc.so.6
⑶ linux下用交叉編譯器編譯時,已經指定了庫的路徑跟庫的名字,可是還是報錯找不到庫。
看起來它不是個庫,倒像是個可執行程序
一般so都放在lib這樣的目錄下,你這個是bin,而且和它在一起的都是可執行程序,並且它沒有so後綴名。
⑷ 32位(i686)linux的ubuntu,交叉編譯3.0.2的vsftp老出錯
交叉編譯環境或者編譯之前的設置有問題。
當然還一個可能就是 vsftp 對交叉編譯的支持不好。導致調用錯了 so 函數庫文件。
你這個提示明顯的是調用了當前系統的 /lib/libpam.so.0 ,交叉編譯環境,肯定不能調用這個 so 函數庫文件。
⑸ 為什麼.o鏈接未so庫符號丟失了
o鏈接未so庫符號丟失了原因交叉應用程序的開發需要用到交叉編譯的鏈接庫,我們在移植應用程序到我們的目標板。
鏈接庫的目錄是/usr/local/arm/arm-linux/lib,將其中部分庫文件及符號鏈接拷貝到root_nfs(你創建的busybox的根目錄)文件夾下的lib文件夾中。
extern:
extern是編程語言中的一種屬性,它表徵了變數、函數等類型的作用域(可見性)屬性,是編程語言中的關鍵字。當進行編譯時,該關鍵字告訴編譯器它所聲明的函數和變數已在其他文件中定義。
可以在本模塊或者文件以及其他模塊或文件中使用。通常,程序員會在 "*.c" 文件中聲明定義變數或定義函數,並在「*.h」(頭文件)中使用該關鍵字限定變數或函數等,然後可在該頭文件或其他模塊中include使用。
⑹ Linux下用交叉編譯器編譯報錯缺少Libcso6【求教】
#打開/etc/ldsoconf,在最後一行添加/home/xassassin/armlinuxdev/bin/lib/$sudo vim /etc/ldsoconf#執行此命令,然後再編譯$sudo ldconfigLinux下用交叉編譯器編譯報錯缺少Libcso6【求教】
⑺ Linux下用交叉編譯器編譯報錯缺少Libc.so.6【求教】
#打開/etc/ld.so.conf,在最後一行添加/home/xassassin/armlinuxdev/bin/lib/
$sudovim/etc/ld.so.conf
#執行此命令,然後再編譯
$sudoldconfig
⑻ linux交叉編譯Qt 失敗
設置環境變數 export QT_DEBUG_PLUGINS=1
重新運行程序
Cannot load library /opt/Qt-5.12.4/plugins/platforms/libqxcb.so2
輸入ldd /opt/Qt-5.12.4/plugins/platforms/libqxcb.so
顯示缺少 libxkbcommon,並展示其路徑。
然後將顯示路徑中的拷貝到需要的目錄中。
⑼ 交叉編譯時候怎麼設置連接庫的搜索路徑
找不到libQtGui.so這個庫,添加環境變數LIBRARY_PATH=/opt/Qt4.7/lib試試另外你使是用arm-linux-gcc編譯程序,需要保證QT下的libQtGui.so庫也是用arm-linux-gcc編譯的,否則編譯鏈接會出問題
⑽ ARM交叉編譯時鏈接錯誤,提示collect2: ld returned 1 exit status,求解答
libVimbaC.so編譯的不對, 使用arm gcc鏈接so命令:
arm-none-linux-gnueabi-gcc -o libVimbaC.so -shared ..... VimbaC.cpp
就可以編譯出arm下用的動態庫了.