2014-07-02 132 views
0

我一直在嘗試一段時間爲嵌入式linux(2.6)交叉編譯jamvm(包括GNU classpath),並且我卡在一個微妙的地方。交叉編譯發現大問題,jamvm

我會盡量總結:在發生了很多錯誤之後,我終於編譯了我的體系結構的包,但是雖然我在./configure中指定了--enable-static,但是當我嘗試運行jamvm時,它抱怨沒有找到GLIBC 2.4。事情是,我有2.3.5版本,並且編譯2.4版本的體系結構不是目前的選項(這意味着要開始一個全新的問題)。

我懷疑問題來自使用不同於嵌入式目標支持的工具鏈的機器構建。

問題是我知道與我的CPU相匹配的確切的gcc,glibc,binutils和linux內核頭文件,但問題是我不知道如何將這些信息合併到交叉編譯/構建過程中。

但是,也許我錯了,假設我的機器使用不同的工具鏈會影響交叉編譯。簡而言之,我需要交叉編譯jamvm,使其不會抱怨glibc 2.4或任何其他不被嵌入式系統支持的庫(假設我知道適合我的體系結構的正確工具鏈)

我真的很感謝這個問題的任何幫助。如果我的推理不正確,我也會對這個話題有所瞭解。

回答

2

我不知道我的理解中100%的問題,但也許嘗試通過構建正在創建glibc 2.4上的依賴符號列表:

$ readelf -Ws <your_jamvm_executable_file> | grep \@GLIBC_2\.4 

(使用更輕鬆的grep搜索模式,如果你沒有找到任何符號)

然後,檢查有問題的符號是否有其他版本在您的GLIBC,這是等於或低於GLIBC v2.3.5。我將使用posix_spawn爲例:

(1:517)$ readelf -Ws /lib/libc.so.6 | grep posix_spawn\@ 
    1666: 000d8800 51 FUNC GLOBAL DEFAULT 12 [email protected]@GLIBC_2.15 
    1667: 00127760 51 FUNC GLOBAL DEFAULT 12 [email protected]_2.2 

這意味着,如果posix_spawn被發現在GLIBC 2.15版被拉動,你的程序可以重新編譯使用posix_spawn從GLIBC V2.2,刪除GLIBC 2.15依賴關係(如果posix_spawn是GLIBC v2.15中唯一的符號)。

您可以選擇使用源代碼中此指令以使用其posix_spawn版本,在該單元(.c.cpp文件)的開頭實際使用的符號:

__asm__(".symver posix_spawn,[email protected]_2.2"); 

很抱歉,如果這是不是你在問什麼。

+0

謝謝,問題是我有的符號沒有其他版本的GLIBC。當我運行你的命令時,我只依賴GLIB_2.4。 – Jorge