交叉编译是什么我就不细说了,我使用arm-linux-gnueabihf-gcc在window端进行交叉编译arm的可执行程序中遇到了许多问题(主要就是链接过程出错,不能找到linux的许多文件等)。而编译一个动态库便只需要些头文件,并没有链接的过程,对环境的依赖大大降低了不少。

首先了解编译

我们要分析一下gcc编译的阶段:

1预编译,主要是将#include 的文件内容添加到主程序

2.编译,将程序编译成汇编语言

3.汇编:将汇编语言的程序编成二级制文件

4.链接:将程序依赖的其他等添加到进来、例如静态库这时就可以将代码添加进来,动态库则是在可执行文件中添加一个链接信息,表示在执行的时候需要该动态库,linux下ldd+可执行文件便可以看到其需要的动态库的链接信息。

动态库和静态库究竟是什么

静态库各人理解就是一系列方法的合集,虽然无法使用ldd查看依赖关系,但是在使用其生成的可执行文件时,还是要添加静态库依赖的一些动态库信息,所以最好让静态库可独立。

动态库不像静态库将代码直接添加进来,而是在生成可执行文件时添加一个链接信息,在运行的时候去检测动态库是否存在,不存在会报错。

操作步骤

所以,我们可以在arm的虚拟环境先编译出一个简单的main程序,在其中调用我们的动态库中的函数main1(),便可以弯曲救国,每次编译只需要编译出一个动态库然后替换下去即可。

1.创建一个库文件hello.c hello.h,写入一个简单的helloworld程序,不用创建main()函数。

2.使用arm-linux-gnueabihf交叉编译出一个arm的动态库libhello.so

3.在虚拟机或者拥有gcc的arm上创建一个main.c,并#include "hello.h",主函数并调用即可!

4.编译(注意添加libhello.so路径不然会报错)之后,在arm执行,若是没有将libhello.so拷贝到适合的位置(例如自动寻找的/usr/lib)下,将会提示没有找到该动态库,拷贝到/usr/lib即可。

注意事项

1.更新程序,只需要更新动态库下发到/usr/lib即可。

arn-linux-gcc编译失败,arm-linux-gnueabihf-gcc交叉编译可执行程序失败的一种处理办法...相关推荐

  1. Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决

    Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...

  2. linux 保存编译log,(转)Linux下编译安装log4cxx

    一个项目的服务器端在Linux平台下,用到了开源日志库log4cxx,这个库是apache项目的一个子库.功能很不错.下面记录下它的编译和安装过程. 第一步安装apr-1.3.8,顺序不能错,它必须首 ...

  3. 用gcc编译实现对Linux系统cpu占用

    目标:使用gcc编译代码使得占用系统的cpu. 1.确定是否安装gcc编译 2.vi att.c 文件代码如下: a的数值可自己调控,for循环(;;)代表死循环,在for中运行竟可能复杂的代码,让机 ...

  4. linux 内核编译不能打字,linux系统升级后,手动编译的kernel无法启动问题

    linux系统升级后,手动编译的kernel无法启动问题 linux系统升级后,手动编译的kernel无法启动问题 做开发相关,需要编译3.18的kernel,x86_64的,但是我的deepin升级 ...

  5. linux 线程编译指令i,linux线程篇之(一):线程的创建与应用

    #include#include void thread1(void)//线程1 { int i=0; for(i=0;i<6;i++) { printf("this is a pth ...

  6. linux 上编译arm64,Arch Linux 搭建 arm64/AArch64 交叉编译环境

    Arch Linux 搭建 arm64/AArch64 交叉编译环境 0. 系统环境 系统: Arch Linux: 成文时间最新 工具版本:Binutils:2.34-1 GCC:9.2.1+202 ...

  7. linux下编译安装ntfs,linux下编译安装ntfs

    "mount: you must specify the filesystem type"  错误提示是这个 mount /dev/hda1 /media/windows/   在 ...

  8. linux下编译ts工程,linux下搭建生成HLS所需的.ts和.m3u8文件

    要想利用HLS来实现视频的在线播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 在Mac下,苹果提供了streamingTools的工具,里面有mediafi ...

  9. linux内核编译最详细,Linux内核编译详细教程,linux内核编译

    Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...

  10. linux中swi指令,Arm Linux系统调用流程详细解析SWI

    Unix系统通过向内核发出系统调用(system call)实现了用户态进程和硬件设备之间的大部分接口.系统调用是操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行 ...

最新文章

  1. Java 常用API的运用,效率及技巧
  2. 2.17 Jupyter/ipython 笔记本的快速指南-深度学习-Stanford吴恩达教授
  3. String类型的字符长度(码点/代码单元的区别)
  4. oracle数据库表空间文件收缩实例
  5. 使用Dozer框架进行Bean操作
  6. Django Signal 代码布局
  7. 为什么说java是具有跨平台性
  8. 重新认识鸿鹄与燕雀的区别
  9. android edittext格式验证,EditText实现输入限制和校验功能实例代码
  10. HTML5 拖放(Drag 和 Drop)
  11. Map集合之ConcurrentHashMap
  12. 照片打印软件 mac_如何在Mac上轻松打印照片
  13. CSS字体和文本相关
  14. dep指定版本 go_Go语言包管理工具dep的安装与使用
  15. gta5服务器端文件夹,GTA5路径在steam哪个文件夹里面
  16. c语言中eof的作用,eof在c语言中表示什么
  17. hexdec() 函数
  18. C# PGM格式图像与BMP格式图像相互转换
  19. PCB板-叠层详细介绍
  20. Tableau 2020.2版本如何做环形图

热门文章

  1. 计算机无法传输文件,qq无法传输文件_电脑文件无法通过QQ发送怎么办
  2. 【uni-app】uni-app 封装 uni.request 携带请求头
  3. webService接口的荆棘之路
  4. sqlserver把某个字段多行逗号隔开
  5. mysql error1205 博客_Mysql Error:1205错误诊断
  6. 【Linux】putty 出现 inactive
  7. ssh-keygen 参数说明
  8. 情人节——圣瓦伦丁节(St. Valentine's Day)
  9. 一文详解被阿里腾讯视作核心机密的大数据平台架构
  10. 计算机位置不可用d 桌面,win10系统开机提示desktop不可用位置如何解决