【发布时间】:2012-04-25 17:22:38
【问题描述】:
我有两个“插件”(为了讨论起见,将它们视为软件包中的两个不同应用程序)动态链接到我的库的两个单独构建的版本。我的代码是用 C++ 编写的,并且始终使用一致的命名空间。有时我必须建立两个不同的 每个应用程序的版本。当两个应用程序(插件)时,这似乎会导致一些问题 在包中同时加载。首先,我需要帮助了解为什么会发生此错误。
例如,我有两个独立但名称相同的库,比如mylib.so(或 DLL),每个应用程序都链接到其中一个(唯一)。如果mylib.so 中的底层代码相同(即命名空间、函数名称等,当然实现略有不同),这会导致问题吗?库的两个副本位于独特的位置这一事实是否足以避免由于歧义或其他链接错误而可能出现的任何问题?我认为显然不是......但我想听听专家的意见。
假设上面的描述是导致问题的原因,只会更改库的名称以包含一些版本信息,例如,mylib_v1.so 和 mylib_v2.so 提供对歧义错误的保护(底层函数/命名空间名称是仍然相同)?我仍然认为不是..但这次我不确定。假设我是对的,那么在我的代码中使用一些宏来更改命名空间以在命名空间中包含版本信息(例如,namespace mystuff {} 更改为 namespace mystuff_v1)至少可以解决问题吗?感谢您的见解。
注意:令人惊讶的是,歧义只发生在 Windows 上! Linux 能够毫无问题地处理第二段中的情况。
【问题讨论】:
标签: c++ windows linux dll ambiguous