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

macos, opencv, qt, undefined, x86-64

Solution

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.

Problem

Environment : Mac OS 10.9 + Qt5.1/Qt5.2 + OpenCV2.4.7 + XCode(5.0.2) I can compile the following program via terminal ``` g++ -L/usr/local/lib -lopencv_core -lopencv_highgui \ -I/usr/local/include main.cpp ``` The program a.out runs normally. However, when using Qt 5.1/5.2 to run this OpenCV program, I got "Undefined symbols for architecture x86_64". However, Qt5 works normally for a simple HelloWorld c++ program. What is going on ? Here is the code. ``` #include <iostream> #include "opencv2/highgui/highgui.hpp" using namespace std ; using namespace cv ; int main() { Mat img ; img = imread("image.jpg") ; return 0; } ``` And this is the project setting ``` INCLUDEPATH += /usr/local/include LIBS += -L/usr/local/lib LIBS += -lopencv_core -lopencv_highgui -v cache() TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt SOURCES += main.cpp ``` Here is the compile message ``` /Users/XXX/Qt5.2.0/5.2.0-beta1/clang_64/bin/qmake -spec macx-clang CONFIG+=debug -o Makefile /Users/XXX/Desktop/untitled/untitled.pro /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -Wl,-syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -mmacosx-version-min=10.6 -o untitled main.o -L/usr/local/lib -lopencv_core -lopencv_highgui -v ``` with -v to show invocation ``` Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn) Target: x86_64-apple-darwin13.0.0 Thread model: posix /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -dynamic -arch x86_64 -headerpad_max_install_names -macosx_version_min 10.6.0 -o untitled -lcrt1.10.6.o -L/usr/local/lib -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk main.o -lopencv_core -lopencv_highgui -lstdc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/lib/darwin/libclang_rt.osx.a ``` And here is the error message ``` Undefined symbols for architecture x86_64: "cv::imread(std::string const&, int)", referenced from: _main in main.o .... and so on ``` I checked the problem has nothing to do with `-lstdc++` or `-std=c++11` or `-stdlib=libstdc++`. by using command line compile. Any ideas or suggestion?

Original source