Невозможно передать "someString" в константную строку и использовать Android SDK / ndk с qtcreator с помощью qmake - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь построить длительный настольный проект qt, используя недавно установленные инструменты Android SDK / ndk. Когда я пытаюсь собрать, у меня есть несколько вызовов функций, которые сводятся к следующему:

void callError(const std::string& message) const {
    // do something
}
callError("Some String");

... которые вызывают такие ошибки:

../MyFile.h:42:23: error: reference to type 'const std::string' (aka 'const basic_string<char, char_traits<char>, allocator<char> >') could not bind to an lvalue of type 'const char [43]'
            callError("Some String");

Я, черт возьми, гуглил это и искал уже по форумам qt и stackoverflow, и пока не могу найти рабочее исправление ... Моя рабочая догадка заключается в том, что мне нужно передать специальный android / sdk / ndk специфичный Флаг использования функций C ++ 11/14/17, но я не уверен. Это текущий запуск моего вызова компилятора, когда я пытаюсь собрать с помощью инструментария Android:

/home/pete/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -c -D__ANDROID_API__=21 -target aarch64-none-linux-android -gcc-toolchain /home/pete/Android/Sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64 -DANDROID_HAS_WSTRING --sysroot=/home/pete/Android/Sdk/ndk-bundle/sysroot -isystem /home/pete/Android/Sdk/ndk-bundle/sysroot/usr/include/aarch64-linux-android -isystem /home/pete/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/include -isystem /home/pete/Android/Sdk/ndk-bundle/sources/android/support/include -isystem /home/pete/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++abi/include -fstack-protector-strong -DANDROID -std=c++17 -lstdc++fs -O2 -O2 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB

Оттуда он ссылается на все не зависящие от платформы заголовки, src и библиотеки, которые я использую. Я вижу, что флаг -std = c ++ 17 есть, но я готов либо указать, что порядок отсутствует, либо флаги должны быть другими ... Чтобы использовать этот флаг, я сейчас добавляю его в свой файл .pro :

QMAKE_CXXFLAGS += -std=c++17

Моя настройка:

  • Qt5.12.1
  • QtCreator 4.8.2
  • Clang 8 в комплекте с NDK (я проверил версию в комплекте NDK вручную)
  • SDK версия 26.1.1
  • NDK версия 19.2.5345600

Я также не могу не заметить это в вызове компилятора:

D__ANDROID_API__=21

Это важно? Я бы подумал, что это должно сказать = 26 для версии SDK, не так ли?

...