如何解决符号混淆?
How to resolve confilct of symbols?
我有一个库libA.so
,其中有类MyClass
,我有一个库libB.so
,其中也有名为MyClass
的类。这些类仅用于库中。首先,我的程序加载libA.so
然后libB.so
.
问题是libB.so
使用来自libA.so
的MyClass
,但必须使用自己的MyClass
。
如何在不重命名或使用命名空间的情况下解决问题?
G++ 版本是 5.4.0
通过动态链接,可以使用链接器版本脚本来限制从库中导出哪些符号。 如果确保所有冲突符号都是本地的(或隐藏的,因为它们有时被称为(,则冲突会消失,因为这些符号严格位于库内部。
无论如何,以这种方式管理符号可见性是一种很好的做法,它也可以减少程序加载时间,因为动态链接器必须处理较少的符号。
需要使用标志-fvisibility=hidden
并标记应该可以通过__attribute__ ((visibility ("default")))
导出的函数和类。
标记应由__attribute__ ((visibility ("hidden")))
隐藏的函数和类
例如:
#define LIB_EXPORT __attribute__((visibility ("default")))
class LIB_EXPORT MyClass
{
//realisation
};
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- C++ C4244 =':从"std::streamsize"转换为"无符号短",可能会丢失数据;有什么解决办法吗?
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 如何解决符号混淆?
- 函数路径追加上未解决的外部符号错误
- Lapack函数DGTSV通过C /Visual Studio提供未解决的外部符号
- 运算符过载上未解决的外部符号
- C 未解决的外部符号(公共静态INT)
- MIDL COM库中未解决的外部符号
- 未解决的外部符号sf ::带有SFML的时间
- C++编译错误LNK2019:未解决的外部符号错误
- VTK / ITK/ QT - 未解决的外部符号错误 (LNK2001)
- QT创建者:简单程序未解决的外部符号和外部符号错误
- 如何解决具有多个运算符的反向抛光符号?
- 错误:LNK 2019:Visual Studio中未解决的外部符号_IMP_CRTDBGREPORTW
- 链接2001错误带有未解决的外部符号
- 由于使用未签名的INT,因此在Variadic模板C 上未解决的外部符号错误
- 抽象类上未解决的外部符号
- 使用从WINRT网格类派生的抽象类时,Casttobase未解决的外部符号错误