2014-07-02 99 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