【发布时间】:2014-08-21 13:18:06
【问题描述】:
我正在尝试使用不使用命名空间并导致符号冲突的第三方 C++ 库。冲突符号用于我的代码未使用的类,因此我正在考虑为第三方库创建自定义头文件,其中类声明仅包含我的代码正在使用的公共成员,而忽略任何使用冲突类的成员。基本上是创建一个界面。
我有三个问题:
如果编译为 .obj 文件有效,当我开始链接时,这种技术是否仍会导致符号冲突?
如果这不是问题,链接时不同的类声明会导致问题吗?例如,链接器是否验证每个 .obj 文件使用的类的声明具有相同数量的成员?
如果这两个都不是问题并且我能够链接 .obj 文件,那么在调用方法时会导致问题吗?我不知道 C++ 到底是如何工作的,但是如果它使用索引来指向类方法,并且这些索引从一个 .obj 文件到另一个不同,我猜这种方法会在运行时崩溃。
【问题讨论】:
-
当你有同名但不同定义的类时,我认为它是 UB。你应该把你的代码放到一个独特的命名空间中来解决问题,而不是试图绕过它。
-
如果我正确理解您的问题,您将在链接时遇到问题。
-
你有没有第三方源?
-
您能告诉我们那个第三方库的名称,以便我们避免它吗?不使用任何命名空间在 20 年前是可以接受的,但现在不行。
-
这是 Haxe C++ 目标 (hxcpp)。它在全局命名空间中有 String、File 和 Class 等类。我将创建一个请求,将它们移到子命名空间中,但看起来这将是一项艰巨的任务。
标签: c++ class compilation declaration static-linking