热门标签 | 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 + 执行文件名可以查看该执行文件需要的库,详细可见如下链接:
查看执行文件需要用到的库

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


推荐阅读
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • 操作系统RetHat9.0,存储设备华为3comEX1000在linux上建立能够识别盘阵的方法有三种1、HBA卡;2、TOE卡;3、is ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • WebDAV之葫芦儿·派盘+天悦日记
    天悦日记支持webdav方式连接葫芦儿派盘。是一款清爽简约的日记记录工具,通过天悦日记app随时随地快速写日记,更有智能数据统计分析报表,多端同步多种备份,本地备份和基于Web ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬 ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • 1.      准备工作: 程序:MinGW-3.1.0-1.exe     windows下的gcc,编译c语言的工具下载地址: http:umn.dl.sourceforge. ... [详细]
  • 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.032generic/bulid: 没有那个文件或目录。 停止。”...
    编写一个简单的内核驱动模块1staticinthello_init()2{3printk(“hello,Iaminkernelnow\n”);4return0;5}6voidadd ... [详细]
  • 每当我尝试使用NEON16位浮点内在函数时都会收到此错误。我没有遇到其他数据类型内在函数的任何问题。是否可以在Android上使用NEON16位浮点内在函数? ... [详细]
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社区 版权所有