2011-05-13 35 views
1

我正在嘗試爲WebKit爲嵌入式arm設備(freescale處理器)交叉編譯Qt。我有一個arm-none-linux-gnueabi工具鏈。交叉編譯Qt for Embedded Arm:找不到libpthread.so.0

Qt實際編譯,但我試圖編譯演示時遇到問題,特別是WebKit的,這真的是我後。

我遇到的第一個問題是沒有找到libjscore,這是由於Qt處理靜態構建的方式而導致的錯誤。原來,你可以複製圖書館,它的工作原理,見here

現在編譯再次打破它說找不到libpthread.so.0,這似乎是一個工具鏈問題,而不是一個Qt問題。

在我的工具鏈中搜索目錄樹時,有幾個libpthreads。 的複製發現| grep libpthread命令的輸出在下面供參考。

./arm-none-linux-gnueabi/sysroot/vfp/lib/libpthread-2.5.so 
./arm-none-linux-gnueabi/sysroot/vfp/usr/lib/libpthread_nonshared.a 
./arm-none-linux-gnueabi/sysroot/vfp/usr/lib/libpthread.a 
./arm-none-linux-gnueabi/sysroot/vfp/usr/lib/libpthread.so_orig 
./arm-none-linux-gnueabi/sysroot/vfp/usr/lib/libpthread.so 
./arm-none-linux-gnueabi/sysroot/lib/libpthread-2.5.so 
./arm-none-linux-gnueabi/sysroot/usr/lib/libpthread_nonshared.a 
./arm-none-linux-gnueabi/sysroot/usr/lib/libpthread.a 
./arm-none-linux-gnueabi/sysroot/usr/lib/libpthread.so_orig 
./arm-none-linux-gnueabi/sysroot/usr/lib/libpthread.so 

因此,似乎鏈接器有一些奇怪的東西?另外,需要什麼符號鏈接來創建libpthread.so.0

注意:_libpthread.so_orig_和libpthread.so遵循此fix

任何幫助或建議,非常感謝。現在我已經把頭撞在牆上兩天了。

感謝

+0

你似乎有圖書館。通常如果存在多個共享庫(.so),則它們被命名爲 - somelib.so.1,somelib.so.2,其中有時後綴to .so也可能是版本名稱。所以我會說從libpthread.so.0創建一個sym鏈接到libpthread.so或libpthread.so_orig或libpthread-2.5.so,它可能都會工作,否則只是鏈接到最新的libpthread。 – Abhijith 2011-05-13 14:25:55

+0

@abhijith - 謝謝你的回覆。我添加了一個從libpthread.so.0到libpthread-2.5.so的符號鏈接,現在鏈接器斷開了其他內容。我收到錯誤:'arm-none-linux-gnueabi/bin/ld:找不到-lgcc_s'。工具鏈目錄樹中的某處有一個libgcc_s。有任何想法嗎? – 2011-05-13 15:27:58

+0

它是不夠的,如果它是'某處',它必須在您的工具鏈的搜索路徑。您可以使用-L選項將搜索路徑/目錄添加到鏈接器。例如,如果你想鏈接器在/ usr/local/mydir目錄中搜索任何庫文件,你可以將這個選項提供給鏈接器-L/usr/local/mydir – Abhijith 2011-05-13 15:39:19

回答

1

在一般情況下,你應該確保你建(或已建成的你)工具鏈是它是在建完全相同的路徑。庫(* .so * .a)也應該位於相同的原始路徑中。它應該是這樣的:

<path>/bin
<path>/usr/lib
<path>/lib

這些文件夾不能移動。工具鏈可執行文件位於「bin」中,它所查找的庫位於「../usr/lib和../lib」中。此外,<path>可能以某種方式硬編碼到您的gcc二進制文件中。移動它似乎打破了一切。

+0

從一般帳戶發佈此信息並忘記更新。這個問題確實與路徑有關。實際上,工具鏈提供者沒有在工具鏈中包含我需要的所有庫,所以我必須提取rootfs並以這種方式鏈接到庫。感謝您的輸入! – jyore 2011-07-11 02:55:40

+0

@jyore我面臨着完全相同的問題。您能否詳細說明您的解決方案,或者可以將其作爲答案發布? – Hamzahfrq 2014-10-01 14:03:49

+0

男人這是從過去的爆炸。 IIRC,我將嵌入式設備文件系統安裝在我的構建機器上,並將工具鏈指向該安裝位置,以便它可以使用系統/內核庫 – jyore 2014-10-02 14:03:15

-1

目標是樹莓PI 我複製目標lib目錄到myuserdirectory 目標/ usr/lib目錄到我的交叉編譯/ usr/lib目錄/ directorie 目標/ lib下我的交叉編譯/ lib目錄/ directorie

我創建了兩個符號鏈接:

ln -s /yourcrosscompilerusrlibdirectory /usr/lib/arm-linux-gnueabihf 
ln -s /yourcrosscompilerusrdirectory /lib/arm-linux-gnueabihf 

,它的工作對我來說 的libpthread是/yourcrosscompilerusrlibdirectory