IF
Igor FedyaevAug. 16, 2017, 2:37 a.m.
Сборка 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();
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
AD
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
m
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
m
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10
Last comments
Circuit switching and packet data transmission networks Angioedema 1 priligy dapoxetine
How to Copy Files in Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
Qt/C++ - Tutorial 068. Hello World using the CMAKE build system in CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
EVILEG-CORE. Using Google reCAPTCHA 2001; 98 29 34 priligy buy
PyQt5 - Lesson 007. Works with QML QtQuick (Signals and slots) priligy 30mg Am J Obstet Gynecol 171 1488 505
Now discuss on the forum
добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
IscanderCheOct. 31, 2024, 3:43 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Реализация навигации по разделам Спасибо Евгений!
Игорь МаксимовOct. 3, 2024, 4:05 a.m.
Вы случаем не используете виндовые библиотеки в этом проекте? А то что-то 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 для этих целей использовать: