明远智睿技术论坛

 找回密码
 立即注册
搜索
查看: 5482|回复: 8
打印 上一主题 下一主题

linux应用程序编译出错的疑问。

[复制链接]

3

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
跳转到指定楼层
楼主
发表于 2018-1-29 14:45:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
我有一个简单的应用程序,用虚拟机X86下的GCC编译、连接通过。改Makefile,将CC和LD改为imx6ul的交叉编译工具,编译可以通过,但连接时错误如下:
/opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/bin/ld: gsm0710.o: undefined reference to symbol 'exit@@GLIBC_2.4'
/opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/bin/../libc/lib/arm-linux-gnueabihf/libc.so.6: error adding symbols: DSO missing from command line
make: *** [gsmMuxd] 错误 1

Makefile 增加了-L将交叉工具链的lib目录引入。如下:
CC = /opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc
LD = /opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-ld
#CC = gcc
#LD = ld
CFLAGS = -Wall
LDLIBS = -L /opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf -lm
#LDLIBS = -lm
通常都是Makefile增加-L导入库目录即可,或者是-l引入相关的库,不知道这个exit为C标准库函数怎么无法找到?

回复

使用道具 举报

3

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
沙发
 楼主| 发表于 2018-1-30 12:08:53 | 显示全部楼层
这个支持太蜗牛了。。。。
回复 支持 反对

使用道具 举报

3

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
板凳
 楼主| 发表于 2018-2-2 15:46:57 | 显示全部楼层
软件01 发表于 2018-2-1 16:29
一般简单设置交叉编译工具的环境变量就行的,我们提供的测试源码能编译吗 ...

示例可以,但有个GPRS-MUX串口服用的程序不行。。
回复 支持 反对

使用道具 举报

3

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
地板
 楼主| 发表于 2018-2-2 15:49:31 | 显示全部楼层
ifeq ($(DEBUG),y)
  CFLAGS += -DDEBUG
endif


all: $(TARGET)

clean:
        rm -f $(OBJS) $(TARGET)

%.o: %.c
        $(CC) $(CFLAGS) -c -o $@ $<

$(TARGET): $(OBJS)
        $(LD) $(LDLIBS) -o $@ $(OBJS)

.PHONY: all clean

最后一步LD时出错。
回复 支持 反对

使用道具 举报

3

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
5#
 楼主| 发表于 2018-2-5 10:29:51 | 显示全部楼层
本帖最后由 neverstopping 于 2018-2-5 10:34 编辑
软件01 发表于 2018-2-3 13:34
那是你Makefile应该有问题啊,我也编译过GPS的串口测试程序,没问题啊,但是Makefile跟你的写法不一样的 ...

Make 将CC 和LD 更改为X86-32下的gcc 可以连接目标可执行文件,但用iMX6的交叉编译工具连接时出错
回复 支持 反对

使用道具 举报

3

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
6#
 楼主| 发表于 2018-3-6 10:14:17 | 显示全部楼层
应用相当简单,就2个.c文件和2个.h文件,用x86的gcc可以编译出目标程序,但改为交叉编译工具就不行,下面是Makefile:

DEBUG = y

TARGET = gsmMuxd
SRC = gsm0710.c buffer.c
OBJS = gsm0710.o buffer.o

CC = /opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc
LD = /opt/imx6-linux/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-ld
#CC = gcc
#LD = gcc
CFLAGS = -Wall
LDLIBS = -lm

ifeq ($(DEBUG),y)
  CFLAGS += -DDEBUG
endif


all: $(TARGET)

clean:
        rm -f $(OBJS) $(TARGET)

%.o: %.c
        $(CC) $(CFLAGS) -c -o $@ $<

$(TARGET): $(OBJS)
        $(LD) $(LDLIBS) -o $@ $(OBJS)

.PHONY: all clean
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|明远智睿  

GMT+8, 2024-5-6 00:17 , Processed in 0.058221 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表