Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588813
  • 博文数量: 169
  • 博客积分: 2656
  • 博客等级: 少校
  • 技术积分: 1685
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 13:03
文章分类

全部博文(169)

文章存档

2011年(1)

2010年(135)

2009年(33)

我的朋友

分类: 嵌入式

2010-05-20 23:32:44

问题描述:
使用downloadable kernel module工程编译App.o时, 出现下面错误。经试验发现, 如果把Build_Target中的文件Exlude几个就可以生成App.o. 如果多加一个就会有下面错误出现. 请问这个问题怎么解决?
感觉有一个最大支持的文件个数. 目前这个工程中的的文件个数为506个.

......
s/equip/source/MemProc.o      && if [ "0" = "1" ]; then plink "App/NonDebug/App.o";fi
building App/NonDebug/App.o
ccppc.EXE: CreateProcess: No such file or directory
D:\Workbench\vxworks-6.4\host\x86-win32\bin\make.exe: *** [App/NonDebug/App.o] Error 1
Build Failed in Project 'App' (Process Exit Value was 2):   2009-10-21 14:50:13   (Elapsed Time: 00:14)
 
答复:
出错的原因时链接行超过了windowsXP一行输入的上限。
可以把链接的这一行重定向到一个文件中,然后把文件作为输入。可以按照下面的步骤尝试。
从编译输入看,编译的是一个 Partial Image Linker 工程,在 Properties -> Build Properties -> Build Tools -> Command
有链接脚本,下面是脚本的原始状态:
echo "building $@";%linkerprefix% $(TOOL_PATH)ccppc -r -nostdlib -Wl,-X %ToolFlags% -o %OutFile% %Objects% $(ADDED_OBJECTS) $(LIBPATH) $(LIBS) $(ADDED_LIBPATH) $(ADDED_LIBS) && if [ "$(EXPAND_DBG)" = "1" ]; then plink "$@";fi

在这里%Objects%代表了全部.o文件,这条指令在windowsXP中作为一条命令执行,当.o文件太多并且目录比较长的时候,会超过windowsXP对一行输入的限制。做如下修改,然后重新编译,如果是这个原因引起,应该能够解决。

echo "building $@";echo %Objects% > objects.lst;%linkerprefix% $(TOOL_PATH)ccppc -r -nostdlib -Wl,-X %ToolFlags% -o %OutFile% @objects.lst $(ADDED_OBJECTS) $(LIBPATH) $(LIBS) $(ADDED_LIBPATH) $(ADDED_LIBS) && if [ "$(EXPAND_DBG)" = "1" ]; then plink "$@";fi

echo %Objects% > objects.lst;将所有的.o放到objects.lst中,@objects.lst 把文件作为输入。作为调试手段,可以查看工程目录下的objects.lst是否生成且内容是否正确。
 
对于DKM工程的其他子类,例如lib等,都可以用类似的方法。
阅读(5670) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~