交叉编译时候如何设置连接库的搜索路径(转)

交叉编译的时候不能使用本地(i686机器,即PC机器,开发机器)机器上的库,但是在做编译链接的时候默认的是使用本地库,即/usr/lib,/lib两个目录。因此,在交叉编译的时候,要采取一些方法使得在编译链接的时候找到需要的库。

首先,要知道:编译的时候只需要头文件,真正实际的库文件在链接的时候用到。这是我的理解,如果有不对的地方,敬请网上各位大侠指教) 然后,讲讲如何在交叉编译链接的时候找到需要的库。

 (1)、交叉编译时候直接使用-L和-I参数指定搜索非标准的库文件和头文件的路径。例如:

 arm-linux-gcc test.c -L/usr/local/arm/2.95.3/arm-linux/lib -I/usr/local/arm/2.95.3/arm-linux/include

(2)、使用ld.so.conf文件,将用到的库所在文件目录添加到此文件中,然后使用ldconfig命令刷新缓存。

(3)、使用如下命令:

 $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/2.95.3/arm-linux-lib

参见《ld.so.conf 文件与PKG_CONFIG_PATH变量》这篇文章。

(4)、交叉编译时使用软件的configure参数。例如我编译minigui-1.3.3,使用如下配置:

 #!/bin/bash

 rm -f config.cache config.status

./configure --build=i686-linux --host=arm-linux --target=arm-linux \

CFLAGS=-I/usr/local/arm/2.95.3/arm-linux/include \

 LDFLAGS=-L/usr/local/arm/2.95.3/arm-linux/lib \

--prefix=/usr/local/arm/2.95.3/arm-linux \

--enable-lite \

--disable-galqvfb \

 --disable-qvfbial \

 --disable-vbfsupport \

 --disable-ttfsupport \

--disable-type1support \

--disable-imegb2312py \

--enable-extfullgif \

--enable-extskin \

 --disable-videoqvfb \

--disable-videoecoslcd

这里我配置了CFLAGS和LDFLAGS参数,这样一来,我就不用去修改每个Makefile里-L和-I参数了,也不用再去设置LD_LIBRARY_PATH或者改写ld.so.conf文件了。


交叉编译是一种用于为目标平台生成二进制文件的过程,而这个目标平台的架构、操作系统等可能与执行编译操作的主机环境不同。在涉及动态链接(如 `.so` 文件)的情况下,我们需要特别注意一些步骤。 ### 交叉编译及链接 .so #### 基本流程 1. **工具链准备** 首先需要安装适合的目标系统的交叉编译工具链 (例如 arm-linux-gnueabi-gcc) 。该工具链将包含适用于目标硬件的所有构建组件。 2. **配置 CMake 或 Makefile** 确保您的 `CMakeLists.txt` 或者 Makefile 脚本指定了正确的交叉编译器路径,并设置好相关的选项,比如 `-DCMAKE_SYSTEM_NAME=Linux`, 和指定适当的 sysroot 目录来找到系统头文件以及依赖项。 3. **编译共享(.so)** 如果项目本身包括创建自定义.so的部分,则需保证它按照目标体系结构正确地进行了编译,并且导出了必要的符号供外部程序使用。 4. **链接阶段处理** 当您编写的应用需要用到已有的第三方`.so`时,在链接过程中应明确告知编译器去哪里寻找它们(通过 -L标志添加搜索目录),并且还需要列出实际要连接的具体(-lmylib形式表示加载 libmylib.so )。另外还要确认运行时刻能够定位到这些所需的 shared objects ,这通常涉及到调整 LD_LIBRARY_PATH 变量或是直接拷贝至标准位置下。 5. **测试验证** 最后一步是在真实的设备上部署并检验整个应用程序是否可以正常工作无误。 #### 示例命令片段 ```bash # 设定环境变量指向 cross compiler prefix. export CC=/path/to/toolchain/bin/arm-linux-gnueabihf-gcc export CPPFLAGS="--sysroot=/path/to/sysroot" # 执行 cmake configuration with toolchain file if necessary. cmake .. -DCMAKE_TOOLCHAIN_FILE=path_to_toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release make all # Build the project including any associated so files. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值