免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9881 | 回复: 28
打印 上一主题 下一主题

急求makefile.am问题!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2009-04-03 15:26 |只看该作者 |正序浏览
5可用积分
最新!问题修改为:
我的程序结构是这样的:
总共两个目录:viaencode/   videolib/
viaencode/下有:两个源文件和一个makefile.am文件 encodeapi.c  、viaenc.c 、 Makefile.am
videolib/下有:四个头文件 MP4EncApi.h、hw_lib.h、ViaApi.h 、itu.h
以及六个.a库文件:libext_device_ctrl.a 、libhwdec.a、libhwenc.a、libitu.a、libuserdev.a、libvia.a

Makefile.am中内容为:
bin_PROGRAMS = viaenc
viaenc_SOURCES = viaenc.c encodeapi.c
AM_CFLAGS = -I../videolib
LDADD = -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc -lpthread -luserdev

生成makefile后,我将其中的
CC = gcc改成
CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc

make后的错误提示如下:  

[root@ARM viaencode]# make
make  all-am
make[1]: Entering directory `/root/video_save/viaencode'
/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc -I../videolib -g -O2   -o viaenc  viaenc.o encodeapi.o -L../videolib -lvia -litu -lhwdec -lext_device_ctrl -lhwenc -lpthread -luserdev  -lpthread
/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.4/../../../../arm-linux/bin/ld: viaenc.o: Relocations in generic ELF (EM: 3)
viaenc.o: could not read symbols: File in wrong format
collect2: ld returned 1 exit status

make[1]: *** [viaenc] Error 1
make[1]: Leaving directory `/root/video_save/viaencode'
make: *** [all] Error 2
[root@ARM viaencode]#

从Makefile.am的第四行以及结合make后出错的信息可以看出出错的原因,不知道如何解决,请各位帮帮忙,谢谢

[ 本帖最后由 happybgt 于 2009-4-13 11:06 编辑 ]

论坛徽章:
0
28 [报告]
发表于 2009-04-17 15:39 |只看该作者

回复 #28 tonylulu 的帖子

我没有加ld,ar,as,就改了CC,但是编译成功后的目标文件在目标板上成功运行了,奇怪啊,这又是作何解释呢
ac_ct_CC = gcc又是干什么的?这个要改吗?

[ 本帖最后由 happybgt 于 2009-4-17 15:49 编辑 ]

论坛徽章:
0
27 [报告]
发表于 2009-04-17 01:09 |只看该作者

re

没有指明ld,ar,as
因为你是用 autotool工具生成Makefile,默认使用了你宿主机上的ld ar等等
你应该添加上去。
参照内核的的makefile
CROSS_COMPILE=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-
AS              = $(CROSS_COMPILE)as                                                                                          
LD              = $(CROSS_COMPILE)ld                                                                                          
CC              = $(CROSS_COMPILE)gcc                                                                                         
CPP             = $(CC) -E                                                                                                   
AR              = $(CROSS_COMPILE)ar                                                                                          
NM              = $(CROSS_COMPILE)nm                                                                                          
STRIP           = $(CROSS_COMPILE)strip                                                                                       
OBJCOPY         = $(CROSS_COMPILE)objcopy                                                                                    
OBJDUMP         = $(CROSS_COMPILE)objdump      
你如果不把ld,cc,ar,as,等指向你的交叉工具链,那么你即使编译成功后也无法在目标板运行的。

论坛徽章:
0
26 [报告]
发表于 2009-04-15 16:00 |只看该作者

回复 #26 tonylulu 的帖子

makefile.am生成的makefile中,我看了一下,没有你说的
LD=...
AR=...
AS=...

只有
CC = gcc
ac_ct_CC = gcc
我将第一个改成了CC=/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc,这个以前就改过。
第二个不知道干啥的,改成ac_ct_CC =/usr/local/arm/gcc-3.4.4-glibc-2.3.6/bin/arm-linux-gcc,我试了下,改不该都一样。

这次我的问题已经解决了,发现不知道什么时候videolib\目录下的库文件少了几个,添加上就好了,生成了我的目标文件viaenc.

虽然这次解决问题的道路非常曲折,但是非常感谢楼上所有朋友对我问题的支持,谢谢!

[ 本帖最后由 happybgt 于 2009-4-15 16:12 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2009-04-14 20:55 |只看该作者

回复 #22 MMMIX 的帖子

我想应该是这样的,如果一切正确的情况下,没有任何错误的时候,make后应该最终生成二进制文件viaenc,而viaenc.o只是生成二进制文件viaenc的中间文件,现在有问题,所以make后只生成了viaenc.o,没有最终生成viaenc。编译 .o 的命令应该在由makefile.am生成的makefile中。不知道我说的对不对~

论坛徽章:
0
24 [报告]
发表于 2009-04-14 20:52 |只看该作者

路漫漫啊

路漫漫啊

[ 本帖最后由 happybgt 于 2009-4-14 20:54 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2009-04-14 19:48 |只看该作者

看来问题很难解决啊

看来问题很难解决啊

[ 本帖最后由 happybgt 于 2009-4-14 20:56 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
22 [报告]
发表于 2009-04-14 15:47 |只看该作者
原帖由 happybgt 于 2009-4-14 15:36 发表
我知道你的意思,你以为我用的是先前生成的 .o,让我把这个 .o 删掉重新 make!!
就算按你说的,也不行!!而且这个我早就试过了。
而我前一个帖子想表达的是,我是更加彻底的从头重新执行整个过程的,第一次make后,其结果还是一样的。什么是第一次make?就是说压根没有.o的情况下make的,are you see it ?!

如果真像你说的这样,那么编译 .o 的命令在什么地方?

论坛徽章:
0
21 [报告]
发表于 2009-04-14 15:36 |只看该作者
原帖由 MMMIX 于 2009-4-14 10:57 发表

你怎么就是不看我的回复呢。

算了,这个帖子我不再跟进了。

我知道你的意思,你以为我用的是先前生成的 .o,让我把这个 .o 删掉重新 make!!
就算按你说的,也不行!!而且这个我早就试过了。
而我前一个帖子想表达的是,我是更加彻底的从头重新执行整个过程的,第一次make后,其结果还是一样的。什么是第一次make?就是说压根没有.o的情况下make的,are you see it ?!
不过依然感谢你的帮助!

[ 本帖最后由 happybgt 于 2009-4-14 15:37 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
20 [报告]
发表于 2009-04-14 10:57 |只看该作者
原帖由 happybgt 于 2009-4-13 21:16 发表
我就是把整个过程都重弄了一遍,包括重新生成makefile,重新make的,一样的结果

你怎么就是不看我的回复呢。

算了,这个帖子我不再跟进了。

论坛徽章:
0
19 [报告]
发表于 2009-04-13 21:16 |只看该作者

回复 #18 MMMIX 的帖子

我就是把整个过程都重弄了一遍,包括重新生成makefile,重新make的,一样的结果
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP