web-dev-qa-db-ja.com

Qt5.1 / Qt5.2 + Mac OS 10.9(Mavericks)+ XCode 5.0.2、アーキテクチャx86_64の未定義のシンボル

環境:Mac OS 10.9 + Qt5.1/Qt5.2 + OpenCV2.4.7 + XCode(5.0.2)

ターミナル経由で次のプログラムをコンパイルできます

g++ -L/usr/local/lib -lopencv_core -lopencv_highgui \
    -I/usr/local/include  main.cpp

プログラムa.outは正常に実行されます。

ただし、Qt 5.1/5.2を使用してこのOpenCVプログラムを実行すると、「アーキテクチャx86_64の未定義のシンボル」が表示されます。

ただし、Qt5は単純なHelloWorld c ++プログラムでは正常に機能します。

何が起こっている ?

これがコードです。

#include <iostream>
#include "opencv2/highgui/highgui.hpp"

using namespace std ;
using namespace cv ;

int main()
{
    Mat img ;

    img = imread("image.jpg") ;

    return 0;
}

そしてこれがプロジェクトの設定です

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

これがコンパイルメッセージです

/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 

-vを指定して呼び出しを表示します

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

そしてここにエラーメッセージがあります

Undefined symbols for architecture x86_64:
"cv::imread(std::string const&, int)", referenced from:
      _main in main.o
.... and so on

問題が-lstdc++または-std=c++11または-stdlib=libstdc++とは何の関係もないことを確認しました。コマンドラインコンパイルを使用する。

何かアイデアや提案はありますか?

9

この問題はこの投稿で回答されています

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

そして sandy.martel によって説明されます

ここで引用しました

Qtバイナリディストリビューションは10.6と互換性があるように-stdlib = libstdc ++でコンパイルされ、10.9のXcode5はデフォルトで-stdlib = libc ++を選択します(OS X 10.7以降のみ)。そのため、標準ライブラリのクラス(この場合はstd :: stringなど)を使用するシンボルは、リンク時に正しく解決されません。これが、このエラー(アーキテクチャx86_64の未定義のシンボル)が表示される理由です。どの標準ライブラリopencvが構築されているかを調べます:otool -Llibopencv_XXX.dylib。正しいもので再構築するか、Qtのmkspecを変更して新しいものを使用する必要があります。

../ Qt5.2.0/5.2.0-rc1/clang_64/mkspecs/macx-clang/qmake.confを変更してこれを解決します

から

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9

そして、再構築する前に、プロジェクトをclean覚えておいてください。

12

問題はシステムにありません。 Macでは、imgcodecsヘッダーを含め、それぞれのlibファイルも含める必要があります。これはあなたが持っていたすべての問題を解決します。

-lopencv_imgcodecs

0
Anubhav Rohatgi

ここに来た場合は、config+=11を変更しても何も起こらないため、再構築する前にプロジェクトをクリーンアップしてみてください。

0
user1767754