0

qmake/qt を使用して、MacOSX で x86_64 アプリケーションをビルドしようとしています。QT4 ではコンパイルできましたが、QT5 ではコンパイルできませんでした。

とにかく、qmake を実行して makefile などを生成した後:

qmake -recursive -spec macx-clang app.pro CONFIG+='静的リリース'

その後、make を実行すると、最終的には次のようになります。

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -headerpad_max_install_names -arch x86_64 -Wl,-dead_strip -framework Cocoa -framework Carbon -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -mmacosx-version-min=10.6 -o (...author's note--tons of .o files here...) -L../lib -L../../debug -F/Users/seth/workspace/qt5.1.0//5.1.0/clang_64/lib -lprotobuf -framework Security -framework SecurityInterface -framework ApplicationServices -framework CoreFoundation -lxml2 -lbz2 -lxar -framework ScriptingBridge -L/Users/seth/workspace/qt5.1.0//5.1.0/clang_64/plugins/iconengines -lssl -lcrypto -lz -lFLAC -framework Carbon -framework QtWebKitWidgets -framework QtQuick -framework QtQml -framework QtNetwork -framework QtCore -framework QtGui -framework QtOpenGL -framework QtWidgets -framework QtPrintSupport -framework Cocoa -framework QtWebKit -framework QtSql -framework QtSensors -framework QtSvg -framework QtXml -framework OpenGL -framework AGL

ld: '__ZN3Log16DebugE7QStringS3_' in debug/Log.o contains undefined reference for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

「アーキテクチャ x86_64 の未定義の参照」が何を意味するのか理解できません。それが問題の核心であることは確かです。他のスレッドを読むと、リンクしているライブラリが x86_64 ではないことを示唆する人もいますが、チェックして再チェックした後、プロセスに関与する x86_64 以外のライブラリが見つかりません。

コマンド Mach-O 64-bit object x86_64で確認した後、ビルドからのすべての .o ファイルは.file

そして、私が参照しようとしているすべてのライブラリ (たとえば、libcrypto など) について:

Non-fat file: ../lib/libcrypto.a is architecture: x86_64

もちろん、すべての Mac フレームワーク ライブラリは 32​​/64 ビットに対応しています。

これをさらにデバッグする方法について何か提案はありますか?

4

1 に答える 1

1

一日中いじっていて、見つけました。

リンクが不平を言っているメソッドには、次のものが含まれています。

qt_mac_execute_apple_script

このメソッドは qt5 には存在しません。

また、問題のあるファイルの前半に、次のものがあります。

extern bool qt_mac_execute_apple_script(const QString &script, AEDesc *ret);

これらの行にコメントを付けると、エラーはなくなります。

つまり、基本的に、欠落しているシンボルに対する非常に悪いコンパイラ エラーです。コンパイラは、あいまいなアーキテクチャ ステートメントを超えて実際の問題が何であるかを指摘するのに十分ではなかったからです。外部と静的に結合されたアプリケーションを構築しているため、おそらく悪化しています。

于 2013-08-23T21:27:43.447 に答える