c++库的编译和链接使用,确实是巨坑
##主要原因:
c++ 大量依赖预编译选项 和 预编译宏开关
跨平台库,有大量的配置需要调整
c++的外部依赖不明确,没有显式标注
windwos的静态库和动态库 有大量的的dllimport dllexport 之类的定义
头文件同时供库自身和外部使用着同时调用,导致有各种宏的奇技淫巧
##从physx库本身来看:
physx被拆分为多个库,有的编译为静态库,有的为动态库,库之间的依赖关系难于直观看到
windows动态库链接静态库,要求两个库有相同的c运行库,mutlthread debugger dll 之类的选项,不同的依赖,导致无法链接
dllimport dllexport 之类的区分 导致c函数名字变化,链接时才出错
链接出的dll 的外部依赖,需要第三方工具分析
功能裁剪,需要对代码进行分析,找到影响功能的宏
导致c++库修改和编译非常缓慢,效率很低
#c++设计问题
缺少模块概念,头文件和库文件分离
动态库和静态库 概念分离,导致使用不便
windows下接口名字会因为 dllexport 而修改
链接依赖关系不明显
大量滥用预编译宏
头文件行为受到宏影响多变,导致库和库使用者之间不一致
head file 头文件地狱,永远找不到应该include哪个头文件
非指针类型不能向前引用
头文件不仅仅是公开API 还包括大量私有实现细节
二进制内部结构一无所知,对编译出来的 dll无法清晰的知道,其中究竟包含了什么内容