Официальный форум СВД Встраиваемые Системы
20 Сентября, 2019, 19:26:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: std::thread в QNX 6.5  (Прочитано 565 раз)
LTR
Интересующийся

Сообщений: 7


« : 09 Апреля, 2019, 10:37:52 »

Здравствуйте.

При попытке использования std::thread не создаются потоки.

Используется:

1) QNX 6.5, Qt 5.7.1 r827, GCC 5.5.0 r343

2) Код:
Код:
#include <QDebug>
#include <thread>

void foo(int i) {
  while (i < 10)
    qDebug() << (i++);
}

int main() {
  qDebug() << "before thread";
  int qq = 0;
  std::thread th1(foo, qq);
  qDebug() << "after thread";
  th1.join();

  return 0;
}

3) Строка запуска сборки:
Код:
11:31:28: Запускается: «C:\QNX650\host\win32\x86\usr\bin\make.exe» -j1
C:/QNX650/host/win32/x86/usr/bin/make -f Makefile.Debug
make[1]: Entering directory `C:/Users/Host/Documents/build-thread_test-QNX65_x86-Debug'
ntox86-g++ -c -pipe -isystem C:/QNX650/target/qnx6/usr/include -mstackrealign -g -std=gnu++1y -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../thread_test -I. -I../../../../QNX650/target/qnx6/opt/qt571/include -I../../../../QNX650/target/qnx6/opt/qt571/include/QtWidgets -I../../../../QNX650/target/qnx6/opt/qt571/include/QtGui -I../../../../QNX650/target/qnx6/opt/qt571/include/QtCore -Idebug -I. -I../../../../QNX650/target/qnx6/opt/qt571/mkspecs/qnx-x86-g++ -o debug/main.obj ../thread_test/main.cpp
ntox86-g++ -Wl,--relax -BC:/QNX650/target/qnx6/x86/lib -Wl,-rpath-link,C:/QNX650/target/qnx6/x86/lib -Wl,-rpath-link,C:/QNX650/target/qnx6/x86/usr/lib -Wl,-rpath-link,C:/QNX650/target/qnx6/opt/qt571/x86/lib -mstackrealign -o thread_test debug/main.obj debug/mainwindow.obj   -LC:/QNX650/target/qnx6/x86/lib -LC:/QNX650/target/qnx6/x86/usr/lib -lm -LC:/QNX650/target/qnx6/opt/qt571/x86/lib -lQt5Widgets -lQt5Gui -lQt5Core
make[1]: Leaving directory `C:/Users/Host/Documents/build-thread_test-QNX65_x86-Debug'
11:31:33: Процесс «C:\QNX650\host\win32\x86\usr\bin\make.exe» завершился успешно.
11:31:33: Прошло времени: 00:04.

4) Ожидаемый результат: запуск потока.

5) Что не работает: вместо запуска потока выводится сообщение:
Цитировать
memory fault (core dumped)
« Последнее редактирование: 09 Апреля, 2019, 10:54:09 от LTR » Записан
alexolut
Интересующийся

Сообщений: 6


« Ответ #1 : 09 Апреля, 2019, 16:50:11 »

Я бы для начала отделил всё это от Qt, оставив только std:: часть. Ну и с gcc 5.5 местным рекомендуется ключик -fno-stack-protector включать.

P.S. Шрифт, конечно, надо бы для кода/цитат и вообще сделать побольше на этом форуме, глаза можно сломать.
Записан
Александр Жданкин
Сотрудник СВД ВС
Интересующийся

Сообщений: 3


WWW
« Ответ #2 : 09 Апреля, 2019, 17:02:39 »

Добрый день!

Предоставьте, пожалуйста, результаты выполнения команд "ntox86-g++ -v" и "ntox86-cpp -v".

Также попробуйте напрямую собрать данный файл (необходимо использовать компилятор с ключом "-std=c++11" для вашего файла: "ntox86-g++ -std=c++11 путь_до_файла"), при этом исключив из него использование QDebug, а затем запустите этот файл на целевой платформе. Сообщите о результатах выполнения данных действий.
Записан

LTR
Интересующийся

Сообщений: 7


« Ответ #3 : 09 Апреля, 2019, 17:49:41 »

ntox86-g++ -v:
Код:
C:\Users\Host>ntox86-g++ -v
Using built-in specs.
COLLECT_GCC=ntox86-g++
COLLECT_LTO_WRAPPER=c:/qnx650/host/win32/x86/usr/bin/../lib/gcc/i486-pc-nto-qnx6
.5.0/5.5.0/lto-wrapper.exe
Target: i486-pc-nto-qnx6.5.0
Configured with: ../configure --host=i686-w64-mingw32 --build=x86_64-linux-gnu -
-srcdir=.. --with-as=i486-pc-nto-qnx6.5.0-as --with-ld=i486-pc-nto-qnx6.5.0-ld -
-enable-gnu-indirect-function=no --with-default-libstdcxx-abi=gcc4-compatible --
enable-cheaders=c --enable-libmudflap --with-sysroot=/opt/kpda/neutrino/ --disab
le-werror --libdir=/c/qnx650/host/win32/x86/usr/lib --libexecdir=/c/qnx650/host/
win32/x86/usr/lib --target=i486-pc-nto-qnx6.5.0 --prefix=/c/qnx650/host/win32/x8
6/usr --exec-prefix=/c/qnx650/host/win32/x86/usr --with-local-prefix=/c/qnx650/h
ost/win32/x86/usr --enable-languages=c++ --enable-threads=posix --disable-nls --
disable-tls --disable-libssp --disable-libstdcxx-pch --enable-libgomp --enable-_
_cxa_atexit --with-gxx-include-dir=/c/qnx650/target/qnx6//usr/include/c++/5.5.0
--with-bugurl=http://www.kpda.ru/support --with-pkgversion=kpda_r343_build_60 --
disable-lto --enable-version-specific-runtime-libs --with-mpfr=/var/lib/jenkins/
workspace/devtools/gcc/gcc_5.5.0_onSVNupdate/_gcc_prereq_libs/libs_win32-x86/x86
/usr --with-gmp=/var/lib/jenkins/workspace/devtools/gcc/gcc_5.5.0_onSVNupdate/_g
cc_prereq_libs/libs_win32-x86/x86/usr --with-mpc=/var/lib/jenkins/workspace/devt
ools/gcc/gcc_5.5.0_onSVNupdate/_gcc_prereq_libs/libs_win32-x86/x86/usr --with-tu
ne=generic CC='i686-w64-mingw32-gcc -Wl,--no-insert-timestamp' LDFLAGS='-Wl,-s '
 CXX='i686-w64-mingw32-g++ -Wl,--no-insert-timestamp' AUTOMAKE=: AUTOCONF=: AUTO
HEADER=: AUTORECONF=: ACLOCAL=:
Thread model: posix
gcc version 5.5.0 (kpda_r343_build_60)

ntox86-cpp -v:
Код:
C:\Users\Host>ntox86-cpp -v
Using built-in specs.
COLLECT_GCC=ntox86-cpp
Target: i486-pc-nto-qnx6.5.0
Configured with: ../configure --host=i686-w64-mingw32 --build=x86_64-linux-gnu -
-srcdir=.. --with-as=i486-pc-nto-qnx6.5.0-as --with-ld=i486-pc-nto-qnx6.5.0-ld -
-enable-gnu-indirect-function=no --with-default-libstdcxx-abi=gcc4-compatible --
enable-cheaders=c --enable-libmudflap --with-sysroot=/opt/kpda/neutrino/ --disab
le-werror --libdir=/c/qnx650/host/win32/x86/usr/lib --libexecdir=/c/qnx650/host/
win32/x86/usr/lib --target=i486-pc-nto-qnx6.5.0 --prefix=/c/qnx650/host/win32/x8
6/usr --exec-prefix=/c/qnx650/host/win32/x86/usr --with-local-prefix=/c/qnx650/h
ost/win32/x86/usr --enable-languages=c++ --enable-threads=posix --disable-nls --
disable-tls --disable-libssp --disable-libstdcxx-pch --enable-libgomp --enable-_
_cxa_atexit --with-gxx-include-dir=/c/qnx650/target/qnx6//usr/include/c++/5.5.0
--with-bugurl=http://www.kpda.ru/support --with-pkgversion=kpda_r343_build_60 --
disable-lto --enable-version-specific-runtime-libs --with-mpfr=/var/lib/jenkins/
workspace/devtools/gcc/gcc_5.5.0_onSVNupdate/_gcc_prereq_libs/libs_win32-x86/x86
/usr --with-gmp=/var/lib/jenkins/workspace/devtools/gcc/gcc_5.5.0_onSVNupdate/_g
cc_prereq_libs/libs_win32-x86/x86/usr --with-mpc=/var/lib/jenkins/workspace/devt
ools/gcc/gcc_5.5.0_onSVNupdate/_gcc_prereq_libs/libs_win32-x86/x86/usr --with-tu
ne=generic CC='i686-w64-mingw32-gcc -Wl,--no-insert-timestamp' LDFLAGS='-Wl,-s '
 CXX='i686-w64-mingw32-g++ -Wl,--no-insert-timestamp' AUTOMAKE=: AUTOCONF=: AUTO
HEADER=: AUTORECONF=: ACLOCAL=:
Thread model: posix
gcc version 5.5.0 (kpda_r343_build_60)
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=i486'
 c:/qnx650/host/win32/x86/usr/bin/../lib/gcc/i486-pc-nto-qnx6.5.0/5.5.0/cc1.exe
-E -quiet -v -iprefix c:\qnx650\host\win32\x86\usr\bin\../lib/gcc/i486-pc-nto-qn
x6.5.0/5.5.0/ -isystem C:/QNX650/host/win32/x86/usr/lib/gcc/i486-pc-nto-qnx6.5.0
/5.5.0/include -isysroot C:/QNX650/target/qnx6/ - -mtune=generic -march=i486
ignoring duplicate directory "c:\qnx650\host\win32\x86\usr\bin\../lib/gcc/i486-p
c-nto-qnx6.5.0/5.5.0/include"
ignoring nonexistent directory "c:\qnx650\host\win32\x86\usr\bin\../lib/gcc/i486
-pc-nto-qnx6.5.0/5.5.0/../../../../i486-pc-nto-qnx6.5.0/include"
ignoring duplicate directory "c:/qnx650/host/win32/x86/usr/lib/gcc/../../lib/gcc
/i486-pc-nto-qnx6.5.0/5.5.0/include"
ignoring nonexistent directory "C:/QNX650/target/qnx6/c/qnx650/host/win32/x86/us
r/lib/gcc/i486-pc-nto-qnx6.5.0/5.5.0/../../../../include"
ignoring duplicate directory "c:/qnx650/host/win32/x86/usr/lib/gcc/../../lib/gcc
/i486-pc-nto-qnx6.5.0/5.5.0/include-fixed"
ignoring nonexistent directory "c:/qnx650/host/win32/x86/usr/lib/gcc/../../lib/g
cc/i486-pc-nto-qnx6.5.0/5.5.0/../../../../i486-pc-nto-qnx6.5.0/include"
#include "..." search starts here:
#include <...> search starts here:
 C:/QNX650/host/win32/x86/usr/lib/gcc/i486-pc-nto-qnx6.5.0/5.5.0/include
 c:\qnx650\host\win32\x86\usr\bin\../lib/gcc/i486-pc-nto-qnx6.5.0/5.5.0/include-
fixed
 C:/QNX650/target/qnx6/usr/include
End of search list.

Код без Qt:
Код:
#include <iostream>
#include <thread>

void foo(int i) {
  while (i < 10)
    std::cout << i++ << "\n";
}

int main() {
  std::cout << "before thread\n";
  int qq = 0;
  std::thread th1(foo, qq);
  std::cout << "after thread\n";
  th1.join();

  return 0;
}

Сборка с "ntox86-g++ -std=c++11 путь_до_файла" и "ntox86-g++ -std=c++11 -fno-stack-protector путь_до_файла" не помогли.
Записан
Александр Жданкин
Сотрудник СВД ВС
Интересующийся

Сообщений: 3


WWW
« Ответ #4 : 09 Апреля, 2019, 19:21:53 »

Уточните версию runtime-библиотеки libstdc++, которая используется при запуске файла на целевой машине (ldd имя_файла). Если библиотека отлична от версии libstdc++.so.6.0.21, то тогда необходимо поменять символьную ссылку на целевой машине libstdc++.so.6 на библиотеку libstdc++.so.6.0.21. Если библиотеки с такой версией на целевой машине нет, то ее можно скопировать из установленного SDP (%QNX_HOST%\usr\lib\gcc\i486-pc-nto-qnx6.5.0\5.5.0) на целевую машину.
« Последнее редактирование: 09 Апреля, 2019, 19:30:06 от Александр Жданкин » Записан

LTR
Интересующийся

Сообщений: 7


« Ответ #5 : 09 Апреля, 2019, 21:39:17 »

Уточните версию runtime-библиотеки libstdc++, которая используется при запуске файла на целевой машине (ldd имя_файла). Если библиотека отлична от версии libstdc++.so.6.0.21, то тогда необходимо поменять символьную ссылку на целевой машине libstdc++.so.6 на библиотеку libstdc++.so.6.0.21. Если библиотеки с такой версией на целевой машине нет, то ее можно скопировать из установленного SDP (%QNX_HOST%\usr\lib\gcc\i486-pc-nto-qnx6.5.0\5.5.0) на целевую машину.

Благодарю, это помогло.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2019 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 17 Сентября, 2019, 07:22:49