【问题标题】:Can't link. Undefined symbols actually present and defined无法链接。实际存在和定义的未定义符号
【发布时间】:2012-01-21 00:50:19
【问题描述】:

我有跨平台解决方案,它成功地为 Windows、Linux 构建,但在 Mac OS X 构建期间。我有这样的问题:

   Undefined symbols for architecture x86_64:
      "qx::syb::DataType<boost::shared_ptr<qx::DistributedObject>, void>::DataType()", referenced from:
          qx::syb::AbsDynInfo const& qx::syb::dynInfo<boost::shared_ptr<qx::DistributedObject> >()in ThemeKit.cpp.o
          qx::syb::AbsDynInfo const& qx::syb::dynInfo<boost::shared_ptr<qx::DistributedObject> >()in libguiserver.a(MemUtils.cpp.o)
      "qx::syb::DataType<boost::shared_ptr<qx::aum::Color>, void>::DataType()", referenced from:
          qx::syb::AbsDynInfo const& qx::syb::dynInfo<boost::shared_ptr<qx::aum::Color> >()in ThemeKit.cpp.o
      "qx::syb::DataType<boost::shared_ptr<qx::ffm::Field>, void>::DataType()", referenced from:
          qx::syb::AbsDynInfo const& qx::syb::dynInfo<boost::shared_ptr<qx::ffm::Field> >()in libguiserver.a(FormConverter.cpp.o)
      "qx::syb::DataType<boost::shared_ptr<qx::lfm::EventType>, void>::DataType()", referenced from:
          qx::syb::AbsDynInfo const& qx::syb::dynInfo<boost::shared_ptr<qx::lfm::EventType> >()in libguiserver.a(FormConverter.cpp.o)
      "qx::syb::DataType<boost::shared_ptr<qx::lfm::ParsedExpression>, void>::DataType()", referenced from:
          qx::syb::AbsDynInfo const& qx::syb::dynInfo<boost::shared_ptr<qx::lfm::ParsedExpression> >()in libguiserver.a(FormConverter.cpp.o)
    ld: symbol(s) not found for architecture x86_64

我检查了链接器行,它包含包含此类符号定义的目标文件。

例如:

bash-3.2$ nm -arch x86_64 -U instance*.o | c++filt | grep -i "qx::syb::DataType<boost::shared_ptr<qx::DistributedObject>, void>::DataType()"
00000000001e6e68 S qx::syb::DataType<boost::shared_ptr<qx::DistributedObject>, void>::DataType()
0000000000092e48 S qx::syb::DataType<boost::shared_ptr<qx::DistributedObject>, void>::DataType()
000000000009b170 S qx::syb::DataType<boost::shared_ptr<qx::DistributedObject>, void>::DataType()

它定义了好几次,但另一个"qx::syb::DataType&lt;boost::shared_ptr&lt;qx::aum::Color&gt;, void&gt;::DataType()" 只定义了一次,也错过了。所以这应该不是问题。

我有最新的可能环境

Mac OS X version:Darwin mac.qx 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
IDE: XCode:4.2
Compiler:gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)

【问题讨论】:

    标签: linker undefined symbols


    【解决方案1】:

    问题与编译器优化有关。像 -O1 这样的使用受限优化是可能的,但更高级的 -O2 或 -O3 会产生这样的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多