STEPcode二次开发入门填坑

来源:互联网 发布:苹果软件开发教程 编辑:程序博客网 时间:2024/06/15 21:42

STEPcode二次开发入门填坑

本文是我在使用STEPCode进行二次过程中遇到的一些问题及解决方案

  • STEPcode二次开发入门填坑
    • STEPcode
    • 入门填坑


STEPcode

STEPcode是MIT开发的一款用于解析STEP (ISO 10303) 协议的开源组件,实现了STEP协议中的诸多应用协议,如.stp格式CAD文件使用的AP203和AP214协议。

入门填坑

  1. 下载源码
  2. 下载 CMake 和 Visual Studio 2012 (用其他编译器也可,本文用的是VS2012)
  3. 解压后源码文件夹为:stepcode-master
  4. 进入源码文件夹,使用 CMake 生成 VS2012 工程文件,假设工程目录为:stepcode-project
  5. 编译整个工程
  6. 整个工程功能太多,进入源码目录 stepcode-master\example\ap203min
  7. 使用 CMake 生成 ap203min 工程,需设置‘STEPCODE_ROOT_DIR = stepcode-master目录’,假设工程目录为ap203min
  8. 直接编译会报错找不到某个头文件来着
  9. 重新用 CMake 生成 ap203min 工程,在 generate 前把那个和 git 相关的选项勾掉,让它选择本地的版本号
  10. 此时依旧没法编译 ap203min 工程,因为 ap203min\sc\schemas\sdai_ap203 里面的内容不全
  11. 从 stepcode-project 中将 schema 中的 sdai_ap203 工程复制并覆盖 ap203min 工程中的sc\schemas\sdai_ap203工程
  12. 此时编译会报项目名’ ‘已更改的错误,依旧无法编译
  13. 将与 sdai_ap203 工程相关的两个子工程 sdai_ap203 和 generate_cpp_sdai_ap203 “属性->通用属性->框架和引用”中引用关系全部去掉,再次编译这两个子工程可以通过
  14. 此时编译主工程会报”无法解析的符号错误”,应该是 lib 引用错误导致的
  15. 在把 sdai_ap203 复制过来的时候,其工程内部的引用关系还是来自于 stepcode-project工程,下面把他改过来
    1. 先将 sdai_ap203 工程中的源码文件全部移除,重新添加 ap203min\sc\schemas\sdai_ap203 目录下的源码文件
    2. 打开 sdai_ap203 的工程配置文件 sdai_ap203.vcxproj
    3. 将其中与 stepcode-project 有关的项目替换成 ap203\sc 中的项目
    4. 不能查找替换,因为其中涉及一些 cmd 命令行的目录
    5. 将 “cmake -HDir1 -BDir2” 中的 Dir1 改成 stepcode-master\example\ap203min 目录,Dir2 改成 ap203min 工程目录
    6. 将涉及 exp2cxx.exe 的引用目录改为 ap203min 下的 exp2cxx.exe (在 sc\src\exp2cxx\Debug 目录里)
  16. 再次编译继续出错,这次是 exp2cxx.exe 报错,因为它需要的 dll 文件找不到
  17. stepcode-project 工程将所有 dll 和 exe 文件统一输出到了 bin 文件夹下,但 ap203min 工程是输出到了各自工程的 Debug 目录下,自然找不到 dll,下面修改各子工程的输出目录,将 dll 和 exe 统一放到 bin 目录下
  18. 记得将 sdai_ap203.vcxproj 文件中关于 exp2cxx.exe 的调用目录也改到 bin 目录下
  19. 又发现 generate_cpp_sdai_ap203.vcxproj 中也用到了 exp2cxx.exe,因此也需要将路径改过来
  20. 再次编译 ap203min 工程依旧会出现10个”LINK2001 : 无法解析的外部符号”错误,经过仔细的排查,发现是由于实例化类的输入参数中带有默认参数,而默认参数解析错误导致的,例如 ap203min.cpp 中有一行”attr->Enum( new SdaiSi_prefix_var( pfx ) );”,其中 SdaiSi_prefix_var 这个类需要两个输入参数,但这里只传进去一个,另一个有默认值的参数,结果就报错了。
  21. 上面错误的原因找到了,SdaiCONFIG_CONTROL_DESIGNNames.h 这个头文件里声明了很多 extern 指针,而这些指针的定义在 SdaiCONFIG_CONTROL_DESIGN.cc 里面,由于是动态链接库,所以在链接时可能没找到这些指针的定义,于是就报LINK2001错误,现在将sdai_ap203 项目改成静态链接库类型,并重新配置好 sdai_ap203.lib 的输出目录后再次编译,就没有链接错误了,但是还有其他错误。
  22. 发现一种解决方法,在 Project->Settings->Link页,选 category 为custom,将 force file output 前打勾,即“强制文件输出”,该选项会忽略重定义错误,强行输出 exe 文件,虽然 exe 可能不能用,但在这里确实解决了问题。

未完待续…

0 0
原创粉丝点击