2011-05-13 435 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