IF
Igor Fedyaev16 серпня 2017 р. 02:37
Сборка Qt / C++ проекта под windows и linux
Доброго времени суток
У меня есть приложение на Qt на двух операционных системах
Я написал код под Qt ->windows ->компилятор msvc отладил и всё работало хорошо.Выдавало то что нужно.
Перенёс код Qt-> linux->компилятор GCC отладил и часть кода упала, выдаёт не то что надо
Подскажите пожалуйста что не так?(участок кода, который падает прикреплен ниже
file.seek(NTH+NBH+NT*(N-1)+nDis*disFmTrace*(N-1)); insbuf=file.read(NT+nDis*disFmTrace); memcpy(trace,insbuf,NT+nDis*disFmTrace); qDebug()<< "trace="<<*trace; for(int n=0;n<nDis;n++) traA.append(GetSample(n)); qDebug()<<"traA= [ "<<traA.value(0)<<" ]"; insbuf.clear();
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
AD
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 11:51
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 07:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi24 червня 2024 р. 15:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 06:04
NSProject04 червня 2022 р. 03:49
IscanderChe31 жовтня 2024 р. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Вы случаем не используете виндовые библиотеки в этом проекте? А то что-то GetSample() подозрительно походит по написанию не виндовую функцию.
Я подключаю библиотеки в проекте в разных файлах
->
#include <stdarg.h>
#include <string>
->
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
->
Приложение выдает неурядицу в traA заполнении , не понимаю что не так
GetSample это функция виртуальная и я её прикрепил ниже
Я получаю разные показатели все время
Я думаю это memcpy
но как это проверить и доказать я не знаю....
как печатать весь массив QByteArrey(insbuf) и как печатать массив char *(trace)
Возможно и в memcpy дело, а вы не пробовали использовать для получения данных из файла QByteArray, да и для самого файла использовать QFile например? Чтобы не заморачиваться с ручным выделением памяти.
Я использую открытие файла (как раз подаю его )
Моя задача
->забрать определённое количество байт в массив char*, для этого я использую контейнер QByteArrey ->заполняю его и перекопирую его через memcpy в массив char * trace (размеры которого определены выше)
просто функция написана под массив char еще до Qt, на чистых с++ собиралось все иделально
Я не уверен, но возможно, стоит передавать не сам QByteArray , а забирать из него сырые данные через метод constData()
Тогда вопрос, почему под windows она собрала и скоприровала всё правильно , а под linux крашнулась?????
Just Win Must Die )))
)))))))не ну умереть то слишком просто))))))))
А если говорить серьезна?
в чём может быть проблема?
Вот написание имени функции с большой буквы как то режет глаза) Я даже на работе по этому дискутировал с главным программеном, "зачем??!!"))
Но дело каждого)
И с последним постом Евгения я согласен)
Я вот не уверен до конца, но в Win и в Linux немного по разному работают некоторые методы у некоторых классов.
Дебажить нужно, обычно Segmenation Fault вываливается при обращении к неинициализированной области памяти, возможно, что GCC несколько иначе выделил память, чем MSVC...
подскажите пожалуйста как вывести в консольна печать например один элемент массива char*
что-то вроде такого можно сделать
Вот как так не знать как вывести в консоль?)
2 варианта, или std::cout << "text"<< value;
Или qDebug();
Друг мой, я знаю как вывести в консоль несколькими способами
Но в данной задаче я вывожу в консоль, а он мне пустое место выдаёт после копирования в него байтовых значений
и у меня сразу вопрос возник....
может я не умею байты выдавайт на печать в консоль
Проблема в строчке
в win сработало а в linux нет
что не так, может кто знает?
В C++ лучше кастовать не в C-style, а в каноничном C++-style, то есть строку стоит переписать так:
Эта сторчка на сработала, говорит невозможно преобразовать char* в float* , если от вашей логике отталкиваться(хотя я тоже про это думал (про байты)), то это реально не работает(((
как переписать массив побайтно из char в float,теперь самый главный вопрос
Я просто знал один способ только
float* A=(float*)B
Ну как вариант, можно испльзовать reinterpret_cast, но это самый беспардонный способ работы с компилятором.
Вообще, обычно char кастуют в целочисленный тип int, зачем его кастовать во float, ума не приложу. Хак на велосипеде, да ещё костылём погоняет.
Мне нужно сделать
допустим есть массив char*(1 байт представление)
->0
->1
->2
->3
->4
->5
->6
->7
нужен массив float*(4байт представление)
->0123
->4567
так же нужно будет
->short int* (2 байте представление)
->int* (4 байта пердставление)
Я реализовывал на прямую просто , но не прокатило linux!11111
Ну... за такой подход к преобразованию значений из char во float по рукам надо бить. Это заведомо undefined behaviour, и на каждой новой платформе с новым компилятором ваш код будет ломаться. И дело не в том, что под linux не прокатило, а в том, что по какой-то причине это прокатило под Windows. А подход с "прокатило" / "не прокатило" вообще недопустим в программировании.
Подскажите пожалуйста:
Если я забрад
QBytearrey buf=file.read(4);
и у меня есть
QVector<float>A(1);
Если я сделаю
memcpy(A.data(),buf.data(),4);
Это и будет моё
-0
-1
-2
-3
-0123?
А зачем вы в данном случае используете memcpy? это функция, которая копирует данные из одной области памяти в другую. Это будет справедливо, когда используются одинаковые структуры данных или массивы с одинаковыми типами данных, а не с разницей размеров, когда один элемент имеет 1 байт, а второй элемент имеет 4 байта.
А вы в данном случае копируете char элементы в область памяти, которая представлена float элементами. Я же написал выше , что нужно использовать функцию atof для преобразования символов char в полноценный float. А тогда не нужно использовать mempcy.
На каждом новом примере все больше убеждаюсь что код написанный изначально на линуксе без привязки к API системы является полноценным кросс платформенным который и на других системах соберется. А вот если на мелкомягкой например собрать то потом в других системах что то отваливается. Это говорид о том что мелкомягкая позволяет писать и запускать с ошибками на которые компилятор работающий не по стандарту плюет. Такая же ситуация была у меня в дипломнйо работе, знакомый написал маленький кусок кода где порядок обьявления и использования был перевернут и тупой виндовый компилятор это принял как норму. Стоит задуматсья в какой системе программить.
Да, вы правы !!!
и это я понял на своей шкуре)))
вы имели ввиду это?
если да, то как то не работает(((
Вообще должно работать, хотя несколько смущает, что выделяете память по char через new - в этом нет необходимости.
можно так, но предварительно подключить библиотеку #include <bitset> // заголовочный файл битовых полей
cout<<bitset<32>(out)<<endl;
А вот тут я немного смущён, я не работал с bitset библиотекой. То есть это заработало?
нет, я тут кое что попробую- о результатах скажу)))
Пардон за некропост)
), а другой - под линукс. В прошнике сделал так:
У меня вопрос следующий:
Есть базовый класс, и есть наследники: один должен подклчаться под винду (там есть #include
Собираю под линукс, но ругается на отсутствие windows.h. В Креаторе название "виндового" файла помечено серым цветом. Можно ли как-то сделать так, чтобы под линукс не ругался на виндовые хедеры?
Отбой.
Забыл в исходнике обернуть каждый #include макросом.
Еще можно union для этих целей использовать: