小编spa*_*ija的帖子

将私有库静态链接到公共库以隐藏符号

考虑以下:

  • 我正在用C++开发一个静态库X,它在内部使用着名的静态库Y v2.0;
  • 我想只分发一个库X',即X与Y静态链接/合并供内部使用;
  • 开发人员想在他的可执行文件中使用X';
  • 而且,他需要Y v1.0(而不是像我一样的v2.0);
  • Y v1.0和v2.0有一些共同的符号,其中一些常见符号的行为也不同.

我开发了X,严格要求使用Y v2.0进行内部业务.这就是说我无论如何都不能恢复到Y v1.0.
另一方面,开发人员使用Y v1.0也有类似的限制.

正如您已经可以争论的那样,问题是:如何在不导出Y符号的情况下将Y链接到X内以避免冲突?Y已经建立,可能我不想修改其源代码或构建设置(如果公开可用).

为了把更多东西放到地球上,我正在设计一个肯定需要一些第三方库的SDK,让我们说zlib.在我的开发中,我将依赖于zlib v1.2.3.4.5.rc6,因为我广泛且成功地使用并测试了它,如果我更改版本,我无法承担SDK测试/修复所需.
SDK将提供的所有静态或dinamically链接库必须隐藏第三方静态库.

潜在客户可能会遇到类似的限制(他需要zlib v7.8.9),那么如何避免符号冲突呢?同样,可能没有更改原始源代码(命名空间等).

更复杂的是,SDK是多平台的,这意味着我需要不同的方法来解决问题,具体取决于平台(Windows,Linux,Mac OS,iOS,Android,...)和使用的编译器(例如,MSVC++和g ++) .

谢谢.

更新
似乎我是这个问题的VENDOR2: 链接到库的多个版本
bstpierre的答案似乎是一个可行的解决方案,但我不确定它是否有效或是否可以在*nix以外的操作系统上重现.

c++ static symbols collision

10
推荐指数
1
解决办法
1223
查看次数

OpenGL(ES 2.0)共享内存架构中的VBO性能

我是桌面GL开发人员,我开始探索移动世界.

为了避免误解,或者欢迎但是微不足道的回复,我可以谦卑地说,我非常了解GL和GL | ES机器.

简短的问题是:如果我们在共享内存架构中使用GL | ES 2.0,那么对客户端阵列使用VBO有什么意义呢?

更详细:

  • 顶点缓冲区是原始内存块,驱动程序无法以任何方式优化任何内容,因为访问模式取决于:1)应用程序如何配置顶点数据布局,2)顶点着色器如何使用缓冲区内容,以及3)我们可以有很多顶点着色器以不同方式操作,并以不同方式获取相同的缓冲区.

  • 对齐:单个VBO存储可以从对底层GL系统最佳的地址开始; 如果我只强制(例如,尊重对齐最佳实践)客户端数组分配到这些边界怎么办?

  • 基于平铺的渲染与立即模式架构不应该发挥作用:根据我的理解,这与我的问题(即内存访问)无关.

我知道使用VBO可以让您的代码在未来的平台/硬件中更好/更快地运行而无需修改它,但这不是这个问题的焦点.

除此之外,我还意识到在共享内存架构中使用VBO会使内存使用量增加一倍(如果由于某种原因,您必须保留顶点数据),并且需要花费大量数据.

与交错顶点数组一样,VBO的使用在开发人员论坛/博客/ official_technotes中得到了很大的"炒作",没有任何数据支持这些语句(即基准测试).

  • VBO在共享内存架构上的使用是否值得?
  • 客户端阵列是否运行良好?
  • 您对此有何看法/了解?

memory mobile gpu opengl-es vbo

10
推荐指数
1
解决办法
2465
查看次数

标签 统计

c++ ×1

collision ×1

gpu ×1

memory ×1

mobile ×1

opengl-es ×1

static ×1

symbols ×1

vbo ×1