【问题标题】:Static linking issue on Solaris sparcSolaris sparc 上的静态链接问题
【发布时间】:2011-02-24 20:49:23
【问题描述】:

Undefined symbols 仅在 solaris sparc 上将 xerces 与应用程序静态链接时出错,而在其他平台(Linux、HP-UX、Solaris-x86)上的静态链接有效。

这里有错误。

Undefined           first referenced
 symbol                 in file
void xercesc_2_8::JanitorMemFunCall<xercesc_2_8::XMLNotationDecl>::release() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(XMLNotationDecl.o)
const xercesc_2_8::XMLAttr*xercesc_2_8::BaseRefVectorOf<xercesc_2_8::XMLAttr>::elementAt(const unsigned)const /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(SAX2XMLReaderImpl.o)
void xercesc_2_8::RefHashTableOf<xercesc_2_8::KVStringPair>::put(void*,xercesc_2_8::KVStringPair*const) /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(DatatypeValidatorFactory.o)
socket                              /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(UnixHTTPURLInputStream.o)
xercesc_2_8::SchemaElementDecl*xercesc_2_8::Janitor<xercesc_2_8::SchemaElementDecl>::release() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(TraverseSchema.o)
void xercesc_2_8::ValueVectorOf<xercesc_2_8::DOMNode*>::addElement(xercesc_2_8::DOMNode*const&) /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(GeneralAttributeCheck.o)
unsigned xercesc_2_8::RefHashTableOf<xercesc_2_8::XercesAttGroupInfo>::getHashModulus()const /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(XTemplateSerializer.o)
bool xercesc_2_8::RefHashTableOf<xercesc_2_8::XMLAttDef>::containsKey(const void*const)const /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(TraverseSchema.o)
void xercesc_2_8::JanitorMemFunCall<xercesc_2_8::IdentityConstraintHandler>::release() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(IdentityConstraintHandler.o)
xercesc_2_8::XMLHolder<_pthread_mutex>::~XMLHolder() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(SolarisPlatformUtils.o)
void xercesc_2_8::ValueHashTableOf<unsigned short>::put(void*,const unsigned short&) /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(GeneralAttributeCheck.o)
void xercesc_2_8::ValueHashTableOf<unsigned>::put(void*,const unsigned&) /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(TraverseSchema.o)
xercesc_2_8::RefVectorOf<xercesc_2_8::DOMImplementationSource>::~RefVectorOf() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(DOMImplementationRegistry.o)
void xercesc_2_8::JanitorMemFunCall<xercesc_2_8::FieldValueMap>::release() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(FieldValueMap.o)
void xercesc_2_8::Janitor<xercesc_2_8::SchemaAttDef>::orphan() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(TraverseSchema.o)
xercesc_2_8::SchemaInfo&xercesc_2_8::BaseRefVectorEnumerator<xercesc_2_8::SchemaInfo>::nextElement() /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(TraverseSchema.o)
void xercesc_2_8::BaseRefVectorOf<xercesc_2_8::ENameMap>::addElement(xercesc_2_8::ENameMap*const) /src/xerces_stat_libs/Solaris28-sun4/libxerces-c.a(TransService.o)

【问题讨论】:

  • 问题已解决。实际上,这是编译器缓存问题。我们删除了 xerces 静态库的编译器缓存,然后将其与二进制文件链接,它已经解决了这个问题。

标签: solaris static-linking xerces-c


【解决方案1】:

Sachin,您能否提供您的链接行,正如您的构建系统所报告的那样?

这将显示正在以什么顺序使用哪些库以及正在调用哪些标志。 (我希望这是一个 CC 命令,而不是 ld。)

为了回应 Erik,Solaris 10 确实支持静态链接——您可以将静态库(.a 文件)与二进制文件链接——它不支持静态链接 Solaris 系统库。 Sachin,从错误看来,您正在将自己的静态 xerces 库与二进制文件链接起来,这在 S10 中很好。

【讨论】:

  • 感谢您的建议。现在问题已经解决了。实际上,这是编译器缓存问题。我们删除了 xerces 静态库的编译器缓存,然后将其与二进制文件链接,它已经解决了这个问题。
【解决方案2】:

就编译和链接而言,在 x86 和 SPARC 上运行的 Solaris 没有区别。您当然可以在 Solaris 10(和 11)上构建和链接静态库。一个值得注意的例外是仅作为动态库提供的 C 库,但您显示的错误消息与 libc 无关。

【讨论】:

  • 我想,在没有 libc 的情况下运行应用程序相当困难。 AFAIK glibc 没有移植到 solaris 但我可能错了。
  • 对,这些错误与 xerces 库代码有关。顺便说一句,编译和链接是在 Solaris 8 sparc 上完成的。在 Solaris 10 上,它是成功的。
  • @Erik:libc 确实是非常强制性的(除非您编写替代系统调用接口)才能运行应用程序,但这并不妨碍为您自己的库使用静态库,这就是我的理解问题。
  • @sachin:所以它无法在 x86 上运行的 Solaris 8 上编译,但不能在 x86 上的 Solaris 10 上编译?你运行的是同一个编译器吗?没有 gcc / studio 不匹配?
  • @jlliager:Solaris 10 x86 没有问题。问题仅适用于 Solaris 8 sparc。
【解决方案3】:

您使用的是什么版本的 solaris?如果是solaris 10,那么你就不走运了,它不再支持静态链接。 见here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2012-07-26
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多