zoukankan      html  css  js  c++  java
  • Indy 编译提示版本不一致问题的解决

    1,起因

    某delphi程序A使用了Indy9.0.18组件。机器中原本自带老版本的Indy组件9.0.12,后升级到9.0.18,使用一直正常。

    某次操作将程序A重新build all了一下,结果提示如下信息,此后即便是compile也会出错。

    [Fatal Error] uMain.pas(11): Unit IdServerIOHandlerSocket was compiled with a different version of IdServerIOHandler.TIdServerIOHandler

    2,解决

    显然错误原因在于indy组件出现了交错使用,应将老版本的组件彻底删除干净。

    先是重装Indy组件9.0.12。将Delphi7SourceIndy目录下的文件用新版覆盖,然后重新编译。将生成的dcu拷贝到LIb目录覆盖。

    结果问题依旧。

    在delphi目录下搜索id文件,发现LibDebug下有大量id*.dcu文件。可能是这些文件是旧版的。

    于是采用9.0.12的dcu文件将其覆盖,再次rebuild程序A,通过!

    3,分析

    那么为什么会和“LibDebug”目录有关呢? delphi IDE配置了搜索目录“$(DELPHI)Lib”,但并未配置使用Lib下的Debug目录呀。

    其实新编一个工程,放入indy新版组件组件,即使LibDebug下有旧版组件,rebuild也是不会出错的。

    分析发现,这个“LibDebug”目录和工程配置有关。原来,本人想要debug程序A,于是在工程选项中勾选了“Use Debug DCUs”

    此选项将自动使用“LibDebug”目录的dcu文件,而不是Lib目录下的dcu。因为Lib目录下的dcu文件中不含调试信息。

    此时我们打开IDE的debugger选项窗口,可以发现IDE使用到了“LibDebug”目录的dcu文件。

    至此问题得到了解决,并且做到了“知其然且知其所以然”!

    本文编写参考了以下文章,在此表示感谢!

    http://blog.csdn.net/gencheng/article/details/8858240

  • 相关阅读:
    c++11 可变参数模板类
    c++11 可变参数模板函数
    c++11 函数模板的默认模板参数
    c++11 模板的别名
    超声波模块SRF05
    Eclipse中快捷键的使用
    移动互联网教育领域或将出现新的风口?
    java Date 和 javascript Date
    linux下安装node.js
    J2EE之初识JSP
  • 原文地址:https://www.cnblogs.com/jackkwok/p/7809469.html
Copyright © 2011-2022 走看看