2016-11-30 2 views
0

Мне нужно установить lib, который использует Qt на старой машине, которая запускает openSuse 11 i586. Фактически, моя машина сборки запускает Ubuntu, и у нас есть своя компиляция Qt - для использования статической функции. По-видимому, обе машины (сборка и цель) имеют совместимые системы.QString, возвращающий разные жало на одну и ту же компиляцию (но разные системы)

Все работает нормально, за исключением QString. На целевой машине QString печатает странные символы.

QTextStream out(stdout); 
QString text = "ABCDEFGHJKLNOPQRSTUWXYZ \n"; 
out << text; 

Например, код выше результатов этого на целевой машине:

ABCDEFGHEFGHSTUWXYZ

Есть ли трюк, чтобы решить эту проблему? Может быть, что-то связано с кодировкой. Я ценю любую помощь.

+0

Может быть проблема с кодировкой файла. Попробуйте обернуть строковый литерал в макросе [QStringLiteral] (http://doc.qt.io/qt-5/qstring.html#QStringLiteral) – MrEricSir

+0

Что показано 'std :: cout << text.toStdString()'? – jpo38

+0

@ jpo38 показывает тот же результат (ABCDEFGHEFGHSTUWXYZ). Предупреждение QT_MESSAESSAWARNING: ING: теперь печатается после того, как toStdString() – Raiden

ответ

0

Чтобы это сработало, ваш исполняемый файл в идеале не должен динамически связываться с чем-либо вообще. Скорее всего, вы сталкиваетесь с бинарной несовместимостью между каким-то магическим соусом glibc или libgcc между вашей системой и целевой системой. Настройте Qt с -static-runtime - Держу пари, что это сработает.

+0

Я уже использую -static для Qt configure. Вы имеете в виду, что мой lib + exe тоже должен использовать статику? – Raiden

+0

Существует довольно фундаментальное различие между «-статической» и «-статической-runtime». –

Смежные вопросы