• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

Linux在PC编译的应用程序放进开发板运行不了

_落雪千寒灬 2018-09-14 浏览量:1193

在PC编译的驱动模块 放进开发板加载时可以正常运行 但是编译的应用程序(最简单的程序hellowold)却不能运行 

具体现象是 1.gcc编译参数不加-static 出现段错误 2.gcc编译参数加-static 就像运行一个计算量很大的程序一样阻塞了 但是这里是一直阻塞也没打印出helloworld来 只能ctrl+c关掉

估计应用程序本身是没问题的 来大神分析一下原因 

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 驱动可以运行,说明你的开发环境是可以的。

    应用程序不能运行,要确认你的应用程序是不是用的编译模块的编译器,是的话编译器也没有问题,找找板子使用的库和编译器的库是不是不一样。

    程序运行出错会给个错误信息,从错误信息入手排查。

    • 发布于 2018-09-14
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 robe_zhang:确定是指定了ARM GCC 编译应用程序和模块的GCC是同一个 因为是打印helloworld 所以就直接#inclue 运行时现象是阻塞了 命令行出现一个空的新行 只能ctrl+c退出 回复

其他答案 数量:12
  • 一般你的开发板和PC不是一个体系架构的,所以你需要搭建交叉编译环境来完成编译,而且需要指定开发库、目标类型等等,否则如果不匹配很可能就启动不了。


    • 发布于2018-09-14
    • 举报
    • 评论 5
    • 1
    • 0
FEItwo 回复了 xdsnet :看来要寻找的东西很多 回复
_落雪千寒灬 回复了 xdsnet :确定是指定了ARM GCC 你说的开发库和目标类型是指? 回复
xdsnet 回复了 _落雪千寒灬 :就是相关的makefile文件中具体的指令,比如制定编译时的目标类型是arm,且使用对应的库。可能驱动模块是成品的Makefile,所以没有出错,你自己的项目具体怎么写的,大家也没有看见,只能是推断啊。 回复
_落雪千寒灬 回复了 xdsnet :我是直接命令编译的arm-linux-gnueabi-gcc hello.c -o hello -static 指定了编译器 这算不算用了对应库 回复
xdsnet 回复了 _落雪千寒灬 :你最好参考一下你的驱动模块是如何编译的,设置对应的编译选项。 回复

  • 开发板是ARM,你开发以及运行环境是linux,所以运行不了正常,你需要交叉编译环境,然后生成ARM环境运行的程序
    • 发布于2018-09-14
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 hardess :确定是指定了ARM GCC 回复

  • 程序移植整好了就能运行了,前提还是上边提到的交叉编译环境,看看你的开发板能不能在线仿真
    • 发布于2018-09-14
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 dingwenlon :确定是指定了ARM GCC 在线仿真是指Jlink逻辑调试吗 这个是可以的 回复

  • 试试这两个方法
    1.开发板通过网口,搭建NFS文件系统,这样每次程序交叉编译完,放到pc的某个路径下就行
    2.每次重新制作根文件系统,重新烧到flash

    • 发布于2018-09-14
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 一指破宫 :讲个鬼故事 我的板子没网口 回复

  • 如果单单是可运行,那多半和配置有关系了
    • 发布于2018-09-15
    • 举报
    • 评论 0
    • 0
    • 0

  • 编译驱动时候,你用的应该是别人写的makefile文件,里面已经定义好了交叉编译的gcc。

    会不会是你自己编译helloworld时候,错误地用了x86的gcc,不是交叉编译的gcc。

    • 发布于2018-09-16
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 xukejing :确定是指定了ARM GCC 回复

  • 开发板是ARM架构的,这里需要用ARM GCC编译器来编译,不能用一般的GCC编译器,否则无法运行
    • 发布于2018-09-16
    • 举报
    • 评论 1
    • 0
    • 0
_落雪千寒灬 回复了 chen0000009 :确定是指定了ARM GCC 回复

  • 如果用的是ARM GCC的话直接搭建好你的交叉编译环境,按照对应的环境来编译操作就可以
    • 发布于2018-09-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 有可能是交叉编译链的问题,这个跟你Linux开发板的内核有很大关系,比如A7核的交叉编译链就不能用在A53开发板上面,并且带不带硬件浮点单元也有很大关系。

    • 发布于2018-09-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 交叉的编译环境要针对你的环境进行设置,不同的环境是不能直接移植编译的
    • 发布于2018-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 即使同样使用了ARM GCC,编译的程序也有可能因为静态库或者动态库的不同而出现不兼容问题,如果开发板性能够用,最简单的方法就是开发板上本地编译,这样就不会出现交叉编译可能遇到的各种问题了。
    • 发布于2018-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • gcc的版本是不是与开发板上的编译方式一样的呢
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

Linux在PC编译的应用程序放进开发板运行不了