none
Wince BSP中source文件问题 RRS feed

  • 问题

  • 在网上看了一些关于makefile,source文件的分析,还是不太明白,刚好实际项目也需要用到这个,请教一下各位如果我想在一个eboot里调用休眠函数该如何实现?休眠函数OEMPowerOff在oal_power_s3c2440a.lib库里;是不是在TARGETLIBS= \下加入$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\oal_power_s3c2440a.lib\然后就可以在eboot的文件里声明,调用了??下面是休眠函数所在的库的source文件 TARGETNAME=oal_power_s3c2440a TARGETTYPE=LIBRARY SYNCHRONIZE_DRAIN=1 NOMIPS16CODE=1 CDEFINES=$(CDEFINES) -DCEDDK_USEDDKMACRO INCLUDES=$(INCLUDES);$(_TARGETPLATROOT)\src\inc;$(_TARGETPLATROOT)\Src\Common\Smartmedia\Fmd SOURCES=\ off.c SOURCELIBS= \ $(_PLATCOMMONLIB)\$(_CPUDEPPATH)\oal_power.lib 现在我遇到的问题是出现错误NMAKE : U1073: don't know how to make 'C:\WINCE500\PBWorkSpaces\TQ2440A\WINCE500\TQ2440_ARMV4I\cesysgen\oak\lib\ARMV4I\retail\oal_power_s3c2440a.lib'请各位指点; 另外(_CPUINDPATH)这个路径在哪儿
    2010年9月2日 3:11

答案

  • 理论上来说,你只要把所有需要联接到的lib文件都包括在TARGETLIBS和SOURCELIBS就可以。但是实际操作中,有很多问题。比如,你将函数KernelIoControl包括到Eboot中,就势必要将coredll.lib包括进来。进而会将大部分CE kernel的library包括进来,不说可行与否,单单只是增加的代码量就足以让Eboot变得肥大无比。所以,在考虑Eboot中增加联接库的时候,不止要看编译顺序,还要看你添进来的库到底是哪一个。 至于lib文件中的函数,一般来说不需要特别导出,只要该函数在源文件中不是static的就行。
    2011年1月11日 14:13
    版主

全部回复

  • 你这个就是牵涉到依赖性问题,也就是说你用到了那个库,但是那个库并不会在eboot编译之前自动生成。

     

    你这个问题,最好的办法,是把源代码文件包含进来。


    I love code.
    2010年9月7日 3:56
    版主
  • 多谢Andy,那么我是否可以指定该lib先于eboot编译生成呢?因为我的eboot里用到了读取NAND flash的库smflash_lib.lib ,它的用法就是在eboot的source里添加进该库,然后在eboot的main文件里声明该库里的函数就可以调用了,它怎么确保smflash.lib在eboot之前就编译生成了呢?盼回复
    2010年9月8日 3:30
  • 如果把源代码文件包含进来,会很麻烦,因为休眠函数调用了很多别的库里的函数,全都包含进来很麻烦的
    2010年9月8日 3:31
  • 很多驱动调用了别的库里的文件,我感觉应该有个编译命令来指定依赖项的生成顺序
    2010年9月8日 3:36
  • 可以指定库文件的绝对地址
    2010年9月9日 17:28
  • 如何指定?我感觉andy说的挺有道理,应该主要是依赖性的问题
    2010年9月10日 0:32
  • 我的BSP中common是最先编译的,eboot是后编译的,也就是说在eboot编译之前那个库就已经生成了;依赖性应该是没有问题的吧?还有一个疑惑就是lib里的函数是否需要导出呢?比如DLL里都有.def文件定义导出函数才可以被别的dll或者exe调用;lib里所有定义的函数都可以访问吗?我的意思是说只要把该库加进去的话
    2010年10月27日 7:43
  • 理论上来说,你只要把所有需要联接到的lib文件都包括在TARGETLIBS和SOURCELIBS就可以。但是实际操作中,有很多问题。比如,你将函数KernelIoControl包括到Eboot中,就势必要将coredll.lib包括进来。进而会将大部分CE kernel的library包括进来,不说可行与否,单单只是增加的代码量就足以让Eboot变得肥大无比。所以,在考虑Eboot中增加联接库的时候,不止要看编译顺序,还要看你添进来的库到底是哪一个。 至于lib文件中的函数,一般来说不需要特别导出,只要该函数在源文件中不是static的就行。
    2011年1月11日 14:13
    版主