linux makefile链接静态库失败

hnoe 2009-12-24 10:05:27
makefile内容:

LD_LIBS := $(LIB_DIR)/MyLib.a
CCLD_LIBS := -lm $(LD_LIBS)

CFLAGS = -Wpointer-arith -Wundef -Wall -Wstrict-prototypes -g -pipe
CFLAGS += -O$(OPTLEVEL)

LKFLAGS =-nostdlib -Wl,--gc-sections -Wl,-static

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

.PHONY: all
all: $(EXPORT_BIN)

$(EXPORT_BIN): MainTask.o $(LD_LIBS)
@echo "Linking $(patsubst $(EXPORT_PATH)/%,%,$@) ..."
$(CC) $(CFLAGS) $(LKFLAGS) $< -o $@ $(CCLD_LIBS)

展开:
arm-linux-gcc -Wpointer-arith -Wundef -Wall -Wstrict-prototypes -g -pipe -O0 -nostdlib -Wl,--gc-sections -Wl,-static MainTask.o -o MainTask -lm /usr/src/app/lib/MyLib.a

结果:
arm-linux/bin/ld: warning: cannot find entry symbol _start; defaulting to 00008074


请高手帮忙指出原因,感谢感谢!
...全文
534 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hnoe 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 challenge99 的回复:]
_start 是啥?
[/Quote]

应该是某个固定的入口,例如有人说把main改成_start就可以解决这个问题
就是说链接程序从某个入口开始,把从该地方开始到结束的所有引用到的符号都链接起来形成目标程序,不在这个入口和出口之间的符号都忽略掉
challenge99 2009-12-24
  • 打赏
  • 举报
回复
_start 是啥?
hnoe 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiang219 的回复:]
不是这个问题,是静态库,sorry
1,引用路径对不对,是否需要加-L选项?
2,生成的方式对不对?ar rcu MyLib.a ...


晕,你-o MainTask 后面没有源文件,从哪里开始?找不到main函数啊。。。


[/Quote]

-L路径也试过,也没有用

MainTask.o根据模式规则

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

由MainTask.c编译出来,就包含了main函数
季昂 2009-12-24
  • 打赏
  • 举报
回复
不是这个问题,是静态库,sorry
1,引用路径对不对,是否需要加-L选项?
2,生成的方式对不对?ar rcu MyLib.a ...


晕,你-o MainTask 后面没有源文件,从哪里开始?找不到main函数啊。。。

james_hw 2009-12-24
  • 打赏
  • 举报
回复
帮你顶一下
季昂 2009-12-24
  • 打赏
  • 举报
回复
-lm后加一个-shared


CCLD_LIBS := -lm -shared $(LD_LIBS)

hnoe 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 do_fork 的回复:]
http://www.lupaworld.com/56821/viewspace-139648.html

希望这个有帮助
[/Quote]

LKFLAGS =-nostdlib 引起的错误,我的程序使用了main函数

再次感谢do_fork
do_fork 2009-12-24
  • 打赏
  • 举报
回复

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧