热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

关于编译执行文件遇到的问题小结

在利用别处拷贝过来的makefile进行编译,编译成功后在服务器上运行程序,但出现如下错误: 而发现makefile中的编译器命令为如下所

 在利用别处拷贝过来的makefile进行编译,编译成功后在服务器上运行程序,但出现如下错误:
这里写图片描述
 而发现makefile中的编译器命令为如下所示:
这里写图片描述
 这里的编译器是关于arm-hisi的编译环境,编译出来的程序是需要在hisi的板子上跑的,所以接下来将执行程序挂载到板子上跑,这是原因之一。
 在板子上跑时还是会出现上面的错误,觉得需要从makefile中入手,但由于自己对makefile不了解,考虑到时间紧急的原因,仅仅对相应的makefile进行了部分的了解。一下链接让我对该部分的makefile有了初步认识性的了解:
编译makefile的部分认识

 接下来认识了静态编译与动态编译的内容,具体链接如下:
静态编译与动态编译相关

 后来知道编译成一个库容易,只要有相关的头文件,即有相应函数的声明就可以了,但如果要生成可执行文件则需要将相应的库链接到执行文件中,这过程中需要了解编译时的相关命令,下面是比较常用的一些编译命令,这里链接库主要用到”-I”(包含的头文件路径),”-L”(链接的库路径),”-l”(链接的库,不包含库的”lib”字符和后面的”.so”或”.a”字符):
编译时比较常用的编译命令

 同时在编译执行文件时加了-static就不能连接.so了,只能连接.a库,所以如果你要将一个特定的动态.so库链接进执行程序中,一般会将其他需要链接到的库也换成动态库。

 在修改了之后又遇到一大片的错误,如下图所示:
这里写图片描述
经后来分析发现由于所用到的库是用c++编写的,而我再编译执行文件时用的是GCC,所以导致了这一系列的错误。这里不用管上层自己编写的程序是用什么编写的,只要先将上层程序生成.o文件,之后再用适合该C++库的G++进行编译即可。

 这里对makefile的文件夹下全部库的包含有一个了解,一般我们可以使用“(wildcard.c).c,"(wildcard .c ./sub/.c)”来指定在”./sub/”目录下的所有.c文件。详细可以查看以下链接:
makefile中wildcard的使用

 在完成上面的一系列纠正后,编译通过,但在挂载运行时,发现找不到执行文件,一开始以为是权限问题,但在修改了权限后还是一样。经网上搜索发现是执行程序在执行时需要链接编译时链接的那些库,所以要将那些库挂载到板子的/lib目录下。
 关于执行程序使用到哪些库,可以用该命令进行查找:
arm-linux-readelf -a + 执行文件名可以查看该执行文件需要的库,详细可见如下链接:
查看执行文件需要用到的库

 最后遗漏了一个程序中动态库的链接和调用方法,如下链接:
动态库的使用


推荐阅读
  • 如何在Linux中实现字符设备控制
    本文详细探讨了在Linux环境下控制字符设备的方法,包括蜂鸣器和模数转换器(ADC)的实际操作案例。对于开发者来说,了解这些基础知识对于嵌入式系统的开发尤为重要。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
  • Linux环境下进程间通信:深入解析信号机制
    本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细探讨了Java命令行参数的概念、使用方法及在实际编程中的应用,包括如何通过命令行传递参数给Java程序,以及如何在Java程序中解析这些参数。 ... [详细]
  • 本文档详细介绍了在 CentOS Linux 7.9 系统环境下,如何从源代码编译安装 libwebsockets 库及其示例程序,并提供了编译过程中可能遇到的问题及解决方案。 ... [详细]
  • 本文介绍了在Makefile及Android.mk文件中添加打印输出信息的方法,并详细解析了Android编译过程中的关键步骤,包括环境变量的设置与编译脚本的执行。 ... [详细]
  • 本文将探讨如何在一个目录下针对多个源文件编写高效的Makefile,通过实例介绍从基础到高级的Makefile编写技巧。 ... [详细]
  • 本文深入探讨了在安装PostgreSQL数据库系统时,执行Configure、Make及Make Install命令的具体含义与作用。 ... [详细]
  • 本文详细记录了在Ubuntu 9.10操作系统上从零开始搭建LAMP(Linux, Apache, MySQL, PHP)环境的过程,包括遇到的问题及解决方案。旨在为初次尝试搭建LAMP环境的开发者提供参考。 ... [详细]
  • QEMU环境下加载首个Linux驱动模块
    本文介绍了如何在Ubuntu 20.04系统上使用QEMU虚拟机加载一个简单的Linux驱动模块。此过程涉及Linux内核4.0版本的配置与编译。 ... [详细]
  • OpenWrt 是一款高度可定制的嵌入式 Linux 发行版,广泛应用于无线路由器等领域,拥有超过百个预装软件包。本文详细探讨如何在 OpenWrt 上通过 Luci 构建自定义模块,以扩展其功能。 ... [详细]
  • 我们正在使用GNU Make来构建我们的系统,在makefile文件的末尾,我们通过一个名为Makedepends的包含来生成一系列的.d文件。然而,当文件被删除或移动时,依赖关系会中断,我们需要寻找一种方法来优雅地处理这种情况。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
author-avatar
花自飘零009玲玲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有