交叉编译库依赖问题的解决方法

20 篇文章 0 订阅
7 篇文章 0 订阅

http://jianbo.de/b/archives/503

在交叉编译移植程序的时候,我们常常会遇到这样的情况:要编译的程序依赖于某个动态/静态链接库。而这个库也需要我们编译移植。在编译没有别的依赖的链接库的时候很简单,设置好交叉工具链、目标架构就可以了。而在编译有依赖需求的程序的时候,我们常常遇到找不到头文件、找不到库文件的问题。很是烦人。
要解决这个问题,其实还是很容易的。只需要先编译安装好运行库,然后在编译有依赖需求的程序的时候,在编译参数里把目标板上的库路径、头文件路径分别通过-L、-I选项添加到工具链中即可。这样一来既不会影响目标板、编译宿主系统的正常运行,也不用每次手动把文件复制到工具链中造成污染(而且升级的时候也分不出来)。
用代码来说话:

export CFLAGS="-L/path/to/target/libs -I/path/to/target/headers"
./configure [some options]
make && make install

举例来说,假设我的目标系统是mini2440开发板(CPU是基于armv4t内核的S3C2440),工具链是CodeSourcery提供的GNU ARM/LINUX工具链。目标板的根文件系统位于/mini2440/root,要编译的程序是lighttpd,依赖于pcre。具体步骤如下:

  1. 移植pcre
    cd /tmp
    # 新建pcre、pcre-install目录,分别用于编译和安装pcre
    mkdir pcre{,-install}
    # 下载解压
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.bz2
    tar xvf pcre-8.00.tar.bz2 -C ./pcre
    cd pcre/
    # 配置(启用unicode支持、设置host运行时系统为arm-none-linux-gnueabi,使configure猜出交叉编译工具链前缀)
    ./configure --host=arm-none-linux-gnueabi --prefix=/ --enable-utf8 --enable-unicode-properties
    # 编译安装到临时目录/tmp/pcre-install
    # 由于是用于嵌入式,所以像文档这类东西就不要了。我们之需要将动态链接库和头文件留下
    make && make DESTDIR=/tmp/pcre-install install
    cp -rv ../pcre-install/lib/pcre.so* /mini2440/root/lib
    cp -rv ../pcre-install/include/pcre.so* /mini2440/root/include
    
  2. 编译安装lighttpd
    cd /tmp
    # 新建lighttpd、lighttpd-install目录,分别用于编译和安装
    mkdir lighttpd{,-install}
    
    # 下载解压
    wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.25.tar.bz2
    tar xvf lighttpd-1.4.25.tar.bz2 -C ./lighttpd
    cd lighttpd/
    
    # 配置(启用unicode支持、设置host运行时系统为arm-none-linux-gnueabi,使configure猜出交叉编译工具链前缀)
    CFLAGS="-march=armv4t -I/mini2440/root/include -L/mini2440/root/lib"
                ./configure --prefix=/ --host=arm-none-linux-gnueabi
                --disable-FEATURE --disable-ipv6 --disable-lfs
                --without-zlib --without-bzip2
    
    # 编译安装到临时目录/tmp/pcre-install
    # 由于是用于嵌入式,所以像文档这类东西就不要了。我们之需要将动态链接库和可执行文件留下
    make && make DESTDIR=/tmp/lighttpd-install install
    cp -rv ../lighttpd-install/lib/* /mini2440/root/lib
    cp -rv ../lighttpd-install/sbin/* /mini2440/root/sbin
    

    这样就可以了

看上面的例子,最关键的地方,就是配置lighttpd的时候,在配置项目前的CFLAGS变量的设置。其实我们完全可以把他单独设置成环境变量,这样就不用每次编译东西都需要输入了。

export CFLAGS="-march=armv4t -I/mini2440/root/include -L/mini2440/root/lib"

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
交叉编译openssl-1.1.1动态,你需要按照以下步骤进行操作: 1. 确保你的系统已经安装好交叉编译工具链。工具链通常由GNU Compiler Collection (GCC)和相关工具组成,负责将代码编译为目标架构所需的机器代码。 2. 下载openssl-1.1.1源代码包,并解压到本地目录中。 3. 进入解压后的源代码目录,打开命令行终端。 4. 设置交叉编译的环境变量。根据你的交叉编译工具链和目标架构的不同,设置对应的环境变量,例如CC、CROSS_COMPILE、AR等。 5. 执行配置命令,用来生成编译所需的Makefile。通常的配置命令为:./configure --prefix=目标安装路径。 6. 执行make命令进行编译,根据系统性能不同,编译时间可能会有所不同。 7. 执行make install命令,将编译好的动态安装到指定目录下。 8. 检查安装是否成功。在目标安装路径下查看是否存在libcrypto.so和libssl.so文件,这些文件就是编译生成的动态。 注意事项: - 在交叉编译过程中,可能会遇到一些问题,例如缺少相关依赖、环境变量错误等,需要根据具体情况进行解决。 - 如果你的目标架构是嵌入式设备或者特定平台,可能还需要进行额外的配置和调整才能正确交叉编译动态。 - 在进行交叉编译时,最好参考openssl官方文档或者相关教程,以确保正确的编译结果和使用方法。 以上就是关于如何交叉编译openssl-1.1.1动态的步骤和注意事项的回答,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值