天天看點

error: symbol(s) not found for architecture x86_64 Qt5.1/Qt5.2 + Mac OS 10.9 (Mavericks) + XCode 5.0.2, Undefined symbols for architecture x86_64

更新Mac到10.9.2版本,同時更新了Xcode,這時候再用QT到時候發現調用OpenCV就出錯:error: symbol(s) not found for architecture x86_64

看起來就是沒有找到合适的lib檔案,太坑爹了,之前還是用得好好的。

重裝Xcode, 重裝OpenCV,重裝QT後無效。

後來千辛萬苦終于找到結果了,大神在這裡:

http://stackoverflow.com/questions/20342896/solved-qt5-1-qt5-2-mac-os-10-9-mavericks-xcode-5-0-2-undefined-symbols

因為OpenCV是用Xcode編譯的,而新的Xcode調用的OS X 10.9,但是QT還沒有更新,還是用10.6,是以編譯後的OpenCV就不會被QT識别了。

解決:

更改 ../Qt5.2.0/5.2.0-rc1/clang_64/mkspecs/macx-clang/qmake.conf  檔案中的

<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: inherit;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;">QMAKE_MACOSX_DEPLOYMENT_TARGET </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;"> </span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent; color: rgb(128, 0, 0);">10.6</span></code>
           

改為

<code style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; white-space: inherit;"><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;">QMAKE_MACOSX_DEPLOYMENT_TARGET </span><span class="pun" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;">=</span><span class="pln" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent;"> </span><span class="lit" style="margin: 0px; padding: 0px; border: 0px; vertical-align: baseline; background-color: transparent; color: rgb(128, 0, 0);">10.9</span></code>
           

然後對QT對工程先清理,再rebuild,就可以編譯了。

Qt5.1/Qt5.2 + Mac OS 10.9 (Mavericks) + XCode 5.0.2, Undefined symbols for architecture x86_64

This issue is answered in this post 

http://qt-project.org/forums/viewthread/35646/

and explained by sandy.martel

I quoted here

Qt binary distribution compile with -stdlib=libstdc++ to be compatible with 10.6, Xcode 5 on 10.9 will select -stdlib=libc++ by default (for OS X 10.7 and better only). So symbol using classes from the standard library (like std::string in this case) will not resolve correctly at link time. This is why you’re seeing this error (Undefined symbols for architecture x86_64) . Look with which standard library opencv is built: otool -L libopencv_XXX.dylib. You’ll have to rebuild it with the right one or change Qt’s mkspec to use the newer one.

I solve this by changing ../Qt5.2.0/5.2.0-rc1/clang_64/mkspecs/macx-clang/qmake.conf

from 

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
           

to 

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9
           

And remember clean your project before rebuild.

http://stackoverflow.com/questions/20342896/qt5-1-qt5-2-mac-os-10-9-mavericks-xcode-5-0-2-undefined-symbols-for-archi

Qt

繼續閱讀