【发布时间】:2016-01-19 12:57:17
【问题描述】:
我有一个使用以下工具链的项目 (full code here):
- OSX 10.10.5(优胜美地)
- C++11(似乎仍然比 C++14 有更好的编译器支持)
- Qt 5.5.0(跨平台 GUI 库)
- Qt Creator 3.5.0(与 Qt 紧密集成的 IDE)
- QMake(与 Qt 紧密集成的构建工具)
- Clang 6.0 64 位(在 OSX 上使用 Qt Creator 时的默认编译器)
- Xcode 6.1.1(另一个用于 OSX 的 IDE,Clang 似乎与之捆绑)
当我尝试构建项目时出现问题。值得注意的是,当我使用 Windows 7 而不是 OSX 和 MingW/GCC 而不是 Xcode/Clang 时,完全相同的代码和项目文件编译和链接时没有任何错误或警告。还值得注意的是,当我上次在我的 OSX 机器上开发时,这个完全相同的工具集在几次提交之前就可以工作了。如果我不得不猜测,我会说在我的项目文件中添加“CONFIG += c++11”行是触发问题的原因(现在无法在不引起其他问题的情况下删除它)。以下是输出示例:
09:06:44: Running steps for project AISweeper...
09:06:44: Starting: "/usr/bin/make" clean
rm -f qrc_sweeper_resources.cpp
rm -f moc_player_abstract.cpp moc_player_human.cpp moc_player_machine_learning_ai.cpp moc_player_probability_based_ai.cpp moc_player_random_action_ai.cpp moc_sweeper_batch_manager.cpp moc_sweeper_batch_settings.cpp moc_sweeper_batch_status.cpp moc_sweeper_control_window.cpp moc_sweeper_game.cpp moc_sweeper_widget.cpp
rm -f ui_sweeper_control_window.h
rm -f player_abstract.o player_human.o player_machine_learning_ai.o player_probability_based_ai.o player_random_action_ai.o sweeper_batch_manager.o sweeper_batch_settings.o sweeper_batch_status.o sweeper_common_functions.o sweeper_control_window.o sweeper_game.o sweeper_main.o sweeper_model.o sweeper_node.o sweeper_widget.o qrc_sweeper_resources.o moc_player_abstract.o moc_player_human.o moc_player_machine_learning_ai.o moc_player_probability_based_ai.o moc_player_random_action_ai.o moc_sweeper_batch_manager.o moc_sweeper_batch_settings.o moc_sweeper_batch_status.o moc_sweeper_control_window.o moc_sweeper_game.o moc_sweeper_widget.o
rm -f *~ core *.core
09:06:44: The process "/usr/bin/make" exited normally.
09:06:44: Configuration unchanged, skipping qmake step.
09:06:44: Starting: "/usr/bin/make"
/Users/alexjohnson/Qt/5.5/clang_64/bin/uic ../AISweeper/ui/sweeper_control_window.ui -o ui_sweeper_control_window.h
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o player_abstract.o ../AISweeper/src/players/player_abstract.cpp
*snip*
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o moc_sweeper_game.o moc_sweeper_game.cpp
/Users/alexjohnson/Qt/5.5/clang_64/bin/moc -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -D__APPLE__ -D__GNUC__=4 -D__APPLE_CC__ -I/Users/alexjohnson/Qt/5.5/clang_64/mkspecs/macx-clang -I/Users/alexjohnson/WORKSPACE_ASJ/GitHub/AISweeper -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtGui.framework/Headers -I/Users/alexjohnson/Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -F/Users/alexjohnson/Qt/5.5/clang_64/lib ../AISweeper/inc/sweeper_widget.h -o moc_sweeper_widget.cpp
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -c -pipe -g -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -std=c++11 -stdlib=libc++ -mmacosx-version-min=10.7 -Wall -W -fPIC -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AISweeper -I. -I../../../Qt/5.5/clang_64/lib/QtWidgets.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtGui.framework/Headers -I../../../Qt/5.5/clang_64/lib/QtCore.framework/Headers -I. -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/AGL.framework/Headers -I. -I../../../Qt/5.5/clang_64/mkspecs/macx-clang -F/Users/alexjohnson/Qt/5.5/clang_64/lib -o moc_sweeper_widget.o moc_sweeper_widget.cpp
/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.10.sdk -stdlib=libc++ -mmacosx-version-min=10.7 -Wl,-rpath,/Users/alexjohnson/Qt/5.5/clang_64/lib -o AISweeper.app/Contents/MacOS/AISweeper AISweeper player_abstract.o player_human.o player_machine_learning_ai.o player_probability_based_ai.o player_random_action_ai.o sweeper_batch_manager.o sweeper_batch_settings.o sweeper_batch_status.o sweeper_common_functions.o sweeper_control_window.o sweeper_game.o sweeper_main.o sweeper_model.o sweeper_node.o sweeper_widget.o qrc_sweeper_resources.o moc_player_abstract.o moc_player_human.o moc_player_machine_learning_ai.o moc_player_probability_based_ai.o moc_player_random_action_ai.o moc_sweeper_batch_manager.o moc_sweeper_batch_settings.o moc_sweeper_batch_status.o moc_sweeper_control_window.o moc_sweeper_game.o moc_sweeper_widget.o -F/Users/alexjohnson/Qt/5.5/clang_64/lib -stdlib=libc++ -framework QtWidgets -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL
clang: error: no such file or directory: 'AISweeper'
make: *** [AISweeper.app/Contents/MacOS/AISweeper] Error 1
09:07:03: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project AISweeper (kit: Desktop Qt 5.5.0 clang 64bit)
When executing step "Make"
09:07:03: Elapsed time: 00:19.
我很难解释所有这些,但我相信这意味着 Clang 在链接时无法在生成的应用程序中找到“AISweeper”目录(因此提到了所有 .o 文件)。这似乎是由 QMake 项目文件中的 TARGET 变量控制的。如果我将此变量从“AISweeper”更改为“Foo”,则它无法找到“Foo”目录。手动检查生成的应用程序后,我可以确认“/Users/alexjohnson/WORKSPACE_ASJ/GitHub/build-AISweeper-Desktop_Qt_5_5_0_clang_64bit-Debug/AISweeper.app/Contents/MacOS/”存在,但其中没有“AISweeper”目录它。我不确定如何确保它作为构建过程的一部分存在。我也尝试过放弃 Clang 并切换到 GCC,但这导致了 C++11、OSX 和 Qt 之间的不兼容问题。我试过用谷歌搜索这个问题,但大多数时候这个错误似乎是在 Clang 找不到第三方库时发生的。就我而言,它似乎无法找到我的项目目录本身。我确实看到有人提到在 Xcode 中打开项目并在那里修改一些设置,但我无法直接使用 Xcode 打开我的项目或找到提到的任何设置。以下是我的 QMake 项目文件 (AISweeper.pro) 的内容,以防我应该尝试在此处修改其他内容:
CONFIG += \
c++11
FORMS += \
ui/sweeper_control_window.ui
HEADERS += \
inc/players/player_abstract.h \
inc/players/player_human.h \
inc/players/player_machine_learning_ai.h \
inc/players/player_probability_based_ai.h \
inc/players/player_random_action_ai.h \
inc/sweeper_batch_manager.h \
inc/sweeper_batch_settings.h \
inc/sweeper_batch_status.h \
inc/sweeper_common_functions.h \
inc/sweeper_control_window.h \
inc/sweeper_game.h \
inc/sweeper_model.h \
inc/sweeper_node.h \
inc/sweeper_widget.h
QT += \
core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
LIBS += \
-stdlib=libc++
RESOURCES += \
rsc/sweeper_resources.qrc
SOURCES += \
src/players/player_abstract.cpp \
src/players/player_human.cpp \
src/players/player_machine_learning_ai.cpp \
src/players/player_probability_based_ai.cpp \
src/players/player_random_action_ai.cpp \
src/sweeper_batch_manager.cpp \
src/sweeper_batch_settings.cpp \
src/sweeper_batch_status.cpp \
src/sweeper_common_functions.cpp \
src/sweeper_control_window.cpp \
src/sweeper_game.cpp \
src/sweeper_main.cpp \
src/sweeper_model.cpp \
src/sweeper_node.cpp \
src/sweeper_widget.cpp
TARGET += \
AISweeper
TEMPLATE += \
app
我还能尝试做些什么来解决这个问题?我只是希望这些工具能够很好地相互配合,并构建我的项目,这样我就可以重新开始编码!
【问题讨论】:
标签: xcode macos qt c++11 clang