arm-linux-gcc静态编译和动态编译的区别

很多教程会提到加上-static是静态编译,但对于新手来说没有用例子来说明可能不太好理解,今天我就介绍一下关于这方面知识的一个例子:

最近在做一个关于freetype字体的东西,需要依赖freetype官方提供的库,我已经把电脑这边的环境配置好了,如下图,我分别用-static和不用-static编译出了两个可执行程序,用-static编译出来的文件明显大得多,因为它已经把该程序依赖的一些库文件链接到该文件里面去了,在ARM开发板上面运行该程序时不需要依赖库了,而不加-static的运行时则需要依赖的库。

root@ubuntu:/home/linuxsystemcode/04th_print_info# arm-none-linux-gnueabi-gcc -finput-charset=GBK -o example1_static example1.c  -lfreetype -lm -static
root@ubuntu:/home/linuxsystemcode/04th_print_info# 
root@ubuntu:/home/linuxsystemcode/04th_print_info# 
root@ubuntu:/home/linuxsystemcode/04th_print_info# ls
example1.c  example1_static  simsun.ttc
root@ubuntu:/home/linuxsystemcode/04th_print_info# arm-none-linux-gnueabi-gcc -finput-charset=GBK -o example1 example1.c  -lfreetype -lm
root@ubuntu:/home/linuxsystemcode/04th_print_info# ls
example1  example1.c  example1_static  simsun.ttc
root@ubuntu:/home/linuxsystemcode/04th_print_info# ls -l
total 12728
-rwxr-xr-x 1 root root    13481 Aug 16 22:54 example1
-rw-r--r-- 1 root root     4698 Aug 15 19:57 example1.c
-rwxr-xr-x 1 root root  2491106 Aug 16 22:53 example1_static
-rw-r--r-- 1 root root 10512288 Jul 11 00:18 simsun.ttc

 静态编译的程序能够直接在开发板上面运行,而动态编译的则不行

[root@iTOP-4412]# ./example1_static ./simsun.ttc
Uniocde:
0x97e6 0x67 0x69 0x66
Unicode: 0x97e6
 ./example1 ./simsun.ttc
./example1: error while loading shared libraries: libfreetype.so.6: cannot open shared object file: No such file or directory

如果需要在开发板上运行该程序则需要把该程序依赖的库拷贝到开发板的/lib目录下,如下图:

[root@iTOP-4412]# cp /mnt/udisk/lib/* /lib/ -rf -d
[root@iTOP-4412]# ./example1 ./simsun.ttc
Uniocde:
0x97e6 0x67 0x69 0x66
Unicode: 0x97e6

这些依赖文件需要到我们的交叉编译工具链里面找,我的是在/usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib下,不同的环境下路径会不一样,根据实际情况判断。

要Ubuntu中编译arm-linux-gnueabihf-gcc,你需要搭建交叉编译环境。首先,你需要在PC端下载编译工具。然后,将交叉编译工具上传至Ubuntu中。你可以从官方网站下载arm-linux-gnueabihf-gcc。交叉编译器有两个版本:arm-linux-gnueabi和arm-linux-gnueabihf。这两个版本的区别在于目标平台的硬件浮点支持。选择合适的交叉编译器后,将下载的gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz文件拷贝到arm目录中。使用以下命令拷贝文件:sudo cp gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f。完成这些步骤后,你就可以使用arm-linux-gnueabihf-gcc进行编译了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [arm-linux-gcc交叉编译环境搭建](https://blog.csdn.net/weixin_42892101/article/details/90370688)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【Linux-ARM】安装 arm-linux-gnueabihf 交叉编译openssl-arm静态库与动态库](https://blog.csdn.net/hanhui22/article/details/125237010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值