2011-12-15 20 views
0

我已經跨平臺的解決方案是至極成功地構建適用於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<boost::shared_ptr<qx::aum::Color>, void>::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) 

回答

0

問題與編譯器優化連接。像-O1這樣的使用限制優化是可能的,但更高級的-O2或-O3會產生這樣的錯誤。