C 我如何处理';处理器不匹配';警告,但不使其静音或包含依赖项的自定义生成副本?

C 我如何处理';处理器不匹配';警告,但不使其静音或包含依赖项的自定义生成副本?,c,pic,sdcc,C,Pic,Sdcc,我用SDCC 3.6.3和gputils 1.5.0构建了一个PIC的C项目,这两个都是我从源代码构建的 链接我的项目时,我从gplink收到以下错误消息: warning: Processor mismatch in "streams.o". warning: Processor mismatch in "mullong.o". warning: Processor mismatch in "divulong.o". warning: Processor mismatch in "gptrpu

我用SDCC 3.6.3和gputils 1.5.0构建了一个PIC的C项目,这两个都是我从源代码构建的

链接我的项目时,我从gplink收到以下错误消息:

warning: Processor mismatch in "streams.o".
warning: Processor mismatch in "mullong.o".
warning: Processor mismatch in "divulong.o".
warning: Processor mismatch in "gptrput1.o".
warning: Processor mismatch in "divuint.o".
warning: Processor mismatch in "gptrget1.o".
warning: Processor mismatch in "eeprom16_gptrget1_dispatch.o".
warning: Processor mismatch in "eeprom16_gptrput1_dispatch.o".
warning: Processor mismatch in "eeprom16_gptrput1.o".
warning: Processor mismatch in "eeprom16_gptrget1.o".
warning: Processor mismatch in "eeprom16_write.o".
有一个特定的标志来关闭这些警告(),但我不喜欢在构建项目时出现任何警告。通过一些搜索,我找到了解决这个问题的方法:SDCC附带的库将默认为PIC 18f452构建。我的项目使用18f26k22,导致这些警告

上述对话包括如何为不同目标重建pic16库的说明。它们已经过时了,但我通过阅读配置脚本找到了答案。我按照以下步骤重新编译库:

  • 修改文件
    device/lib/pic16/configure
    。请注意,您还可以在shell处指定ARCH环境变量,如上述链接所述。(
    ARCH=18f26k22品牌

  • 运行刚刚修改的配置文件:
    /configure
  • makeclean
  • make
  • 升级到lib目录:
    cd..
  • 删除旧版本(如果存在):
    rm-rf版本/pic16
  • make
  • 如果使用非免费代码,则可能需要对其重复此操作。它位于
    设备/非免费/lib/pic16

    构建完成后,可以更改gplink参数,以便-I标志指向包含刚构建的库的构建目录。例如:
    -I/home/username/sdcc/device/lib/build/pic16-I/home/username/sdcc/device/non-free/lib/build/pic16

    不幸的是,gplink使用它找到的第一个lib。这意味着您不能为您使用的每个pic构建lib,将它们都保存在不同的路径中,并且每个pic都有一个-I路径。gplink将选择第一个并使用它,即使在其他-I路径中有其他版本不会产生处理器不匹配错误

    此外,如果为多个芯片开发,那么运行
    makeinstall
    将为特定芯片构建的libs复制到/usr/local/sdcc中也没有帮助


    除了包含我的项目所需的所有内容的自定义副本或使用-w标志外,还有更干净的处理方法吗?

    使用
    -w
    标志并不能解决任何问题,它只是隐藏警告。为什么不同处理器的库位于同一目录中?将它们放在不同的目录中,并在编译/链接特定PIC处理器的项目时参考正确的目录-或者-为每个库指定一个包含处理器的名称,然后将正确的处理器名称传递给link语句,以便它引用正确的库。@user3629249我真的不想隐藏警告。为了回答你的问题,我不确定。SDCC就是这样组织他们的库的。SDCC适用于多种不同类型的硬件,而不仅仅是PIC。它们为pic16和pic14库提供了一个单独的目录,这很好。也许他们不想为所有不同的图片建立一个单独的目录?有很多。重命名是可能的,但我真的不想每次sdcc的新版本出现时,除了为每个芯片编译它们之外,还要修改所有的库。
    # The default architecture can be selected at configure time by setting the
    # environment variable ARCH to the desired device (18fxxx).
    ARCH=${ARCH:-18f452}