构建C ++程序时遇到以下错误:
hidden symbol `__dso_handle' in /path-to/crtbegin.o is referenced by DSO
(其中/ path-to是crtbegin.o的完整路径)
我确保在构建源cpp文件和构建程序使用的.so库时指定了“-shared -fPIC”。但仍然有同样的错误。
我使用“nm”和“readelf”检查库,我确实看到我构建的每个库都引用了__dso_handle。例如:
86: 00000000 0 NOTYPE GLOBAL DEFAULT UND __dso_handle
我有两个问题:
1)。究竟是什么导致库(在C ++中)包含对'_dso_handle'的引用? “-std = c ++ 0x”会导致这种情况吗?或者,'-nartartfiles'会导致这种情况吗?编译器是:i686-wrs-linux-gnu-g ++ v4.6.3。
2)由于crtbegin.o定义了'__dso_handle',为什么这个问题呢?这只是因为它是“隐藏的符号”吗?没有人应该参考隐藏的符号?
感谢。
更新:已解决。见评论#3。