如果两个共享库都暴露相同的全局范围符号,是否有检测和避免的方法?我们最近遇到了一个情况,我们有libA.so
导出SuperCoolMethod()
和libB.so
也暴露了SuperCoolMethod()
这将打破上述方法的前一个副本。这是在使用g ++ 4.0及更高版本的Linux上。所以隔离如果你链接到libA.so
一切都会按预期工作,但一旦libB.so
被添加到图片中,调用了错误的方法,调用会失败,导致正在执行的线程中止,而不通知我们潜在的问题。通过耗尽试验和错误,我们最终发现SuperCoolMethod()
得到了破坏,并通知了供应商libB.so
,以便__attribute__((visibility("hidden")))
可以应用到他们的方法副本。检测/避免g ++符号冲突
1
A
回答
0
动态加载库和通过dlopen和dlsym附加符号将工作。你将不得不编写代码才能做到这一点,但如果你真的被卡住了,这将是一个解决方案
1
因为这是C++库,每个库都应该在它们自己的命名空间中,所以不会发生冲突。
+0
应该适用于,但不适用于第三方供应商。 – 2010-02-10 02:39:17
+1
如果您可以“通知libB.so的供应商,以便__attribute((visibility(”hidden“))”“您可以要求可以在非gnu编译器上工作的命名空间 – Mark 2010-02-10 13:21:54
0
作为解决方法,如果您只使用这两种方法中的一种,则它们在链接命令行上出现的顺序决定了最终可执行文件中最终使用的函数版本。
这不只是一个神器,它的定义行为,所以你可以依赖它(直到供应商修复它)。
相关问题
- 1. 避免jQuery冲突
- 2. 如何避免JQuery冲突?
- 3. 触发来避免冲突
- 4. 如何避免handlebars.js冲突
- 5. 避免CSS类名冲突
- 6. Slickgrid - 避免jquery冲突
- 7. 避免资源冲突
- 8. 避免合并冲突
- 9. python/django:如何检测并避免导入名称冲突?
- 10. 冲突检测2D
- 11. GIT中的冲突解决或冲突避免?
- 12. 如何避免语法冲突
- 13. 如何避免列名冲突?
- 14. PostgreSQL:更新主键,避免冲突
- 15. 避免主键约束冲突
- 16. 如何避免“org.eclipse.jdt.core.JavaModelException:更新冲突”
- 17. 避免命名空间冲突
- 18. HashMap避免冲突的Java示例
- 19. 名称空间避免冲突 - 例子?
- 20. 你如何避免类名冲突?
- 21. 避免地理编码范围冲突
- 22. 避免QML中的名称冲突
- 23. 避免与git合并冲突
- 24. 如何避免合并冲突拉?
- 25. SQL Server CE + Addin读写冲突避免?
- 26. 如何避免jQuery中的类冲突
- 27. sqlite3:避免“数据库锁定”冲突
- 28. 与dplyr避免类型冲突:: case_when
- 29. 避免冲突,如果复制文件
- 30. 如何避免dnn中的jquery冲突
嗯,这可能工作,因为我们从来没有使用需要显式调用有问题的函数,但它并没有告诉我如何发现冲突开始。 – 2010-02-10 02:40:56
nm和grep的组合会告诉你 – pm100 2010-02-10 18:05:21