crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QtCreator vs CMD.exe
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
JustOneQuestion Дата 21.5.2015, 0:19
 
Цитата(AD @ 21.5.2015, 0:37) *
Если же Вам это не нужно, то маловероятно, что кому-то будет интересно разбираться в Ваших ошибках! ;) Только если, у этого кого-то не будет похожей задачки! ;) :)

Вот то-то и оно что код не я писал, и рекомендации к использыванию тоже. ... Но учитывая, что всё же решение использовать QtCreator принадлежало мне и не упоминалось в рекомендация от разработчиков... то вопрос чьи ошибки не самый тривиальный ). Но не в этом суть. Главное то, что мы с коллегами не уверены в том, что можем(что это хотябы порядочно) выкладывать код примеров и упоминать разработчика и производителя этого устройства и софта. Я собственно по этому старался менять имена файлов, ибо они уж очень "именные", ну и как следствие в мэйкфайлах их очень много. Заменить в них все названия... честно говоря, не уверен что можно без ошибок... их там ну очень много. И ладно бы, если б была бы чёткая уверенность что ошибки и проблемы софта и девайса точно производителя а не наши - написали бы уж, не стесняясь. Но учитывая отуствие должно опыта в Qt для такого утверждения у нас нет, мы решили что лучше этого не делать. Ибо можно говорить что это разработчики кривые,... а окажется что это не они а наши руки ))) Не красиво както )
Так что вы уж извините пожалуйста, дело не в том что мы боимся что кто-то сопрёт наш гениальный код состоящий из пары for'ов ) а чисто из за того, что бы не возникло неверного мнения о производители. Девайсина конечно с нереальными и уникальными параметрами.... но и с кучей правил в использовании и особенностями, которые могут быть воприняты как баги, при не слишком внимательном изучении. Да и просто отпугнуть сложностью. ... Не, конечно это не наше дело и никаких законов мы однозначно не нарушим. Просто вопрос порядочности.

А вот что касается
Цитата(AD @ 21.5.2015, 0:37) *
так именно про это я и хотел сказать в прошлом посте. Что если нужно что-то проверить на ЭТОМ коде, то я попробовать могу. ) Вдруг поможет кому-то с подобной проблемой )
Только если, у этого кого-то не будет похожей задачки!



Цитата(JustOneQuestion @ 21.5.2015, 1:16) *
Цитата(AD @ 21.5.2015, 0:37) *
Если же Вам это не нужно, то маловероятно, что кому-то будет интересно разбираться в Ваших ошибках! ;) Только если, у этого кого-то не будет похожей задачки! ;) :)

Вот то-то и оно что код не я писал, и рекомендации к использыванию тоже. ... Но учитывая, что всё же решение использовать QtCreator принадлежало мне и не упоминалось в рекомендация от разработчиков... то вопрос чьи ошибки не самый тривиальный ). Но не в этом суть. Главное то, что мы с коллегами не уверены в том, что можем(что это хотябы порядочно) выкладывать код примеров и упоминать разработчика и производителя этого устройства и софта. Я собственно по этому старался менять имена файлов, ибо они уж очень "именные", ну и как следствие в мэйкфайлах их очень много. Заменить в них все названия... честно говоря, не уверен что можно без ошибок... их там ну очень много. И ладно бы, если б была бы чёткая уверенность что ошибки и проблемы софта и девайса точно производителя а не наши - написали бы уж, не стесняясь. Но учитывая отуствие должно опыта в Qt для такого утверждения у нас нет, мы решили что лучше этого не делать. Ибо можно говорить что это разработчики кривые,... а окажется что это не они а наши руки ))) Не красиво както )
Так что вы уж извините пожалуйста, дело не в том что мы боимся что кто-то сопрёт наш гениальный код состоящий из пары for'ов ) а чисто из за того, что бы не возникло неверного мнения о производители. Девайсина конечно с нереальными и уникальными параметрами.... но и с кучей правил в использовании и особенностями, которые могут быть воприняты как баги, при не слишком внимательном изучении. Да и просто отпугнуть сложностью. ... Не, конечно это не наше дело и никаких законов мы однозначно не нарушим. Просто вопрос порядочности.

А вот что касается
Цитата(AD @ 21.5.2015, 0:37) *
Только если, у этого кого-то не будет похожей задачки!


так именно про это я и хотел сказать в прошлом посте. Что если нужно что-то проверить на ЭТОМ коде, то я попробовать могу. ) Вдруг поможет кому-то с подобной проблемой )


Так... я прошу прощение за странность такого поста.... я так и не понял КАК тут можно редактировать СВОЙ ПОСТ! ))) Админы,... кнопочку РЕДАКТИРОВАТЬ пожалуйста добавте... ииили скажите где она тут у вас .... ну и поправте если можно пост. )
AD Дата 20.5.2015, 23:37
 
Цитата(JustOneQuestion @ 20.5.2015, 18:11) *
Так, если я правильно понял, то верятно разница между С и С++ вот в этих строках.
CFLAGS = -pipe -fno-keep-inline-dllexport -O2 -Wall -Wextra $(DEFINES)
CXXFLAGS = -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
Просто дальше, когда используется $(CXX) $(CC) то они везде используются одинаково за исключением флагов.
Например
$(CC) -c $(CFLAGS) $(INCPATH) -o release\file1.o ..\file1.c
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

Все просто: $(CXXFLAGS) - флаги компилятора С++, так как CXX - это С++, по сути, а CFLAGS - флаги С, соответственно.

Цитата(JustOneQuestion @ 20.5.2015, 18:11) *
Там конечно ещё много чего. Но если четсно, то не сочтите за ленивость, но мне важно чтобы дейвас заработал и я код мог для НЕГО написать... а вот разбираться во всех параметрах всёже немного не моя область. Пока что проблем с проектом у меня нет, и я пожалуй до следущих проблем :) отложу свой интузиазм копания в настройках Qt.
Однако, если есть вопросы, касательно моего кода.. всмысле ТАКОГО кода, который работает в командной строке и QtCreator по разному, то вы спрашивайте, предлагайте что хотите проверить и какие стоят где настройки. Может это кому-то окажется полезным. Буду рад.

Вот гадом буду, если ошибусь во мнении, но, на мой взгляд, оно будет у всех отвечающих форумчан! ;) Сам по себе код никому из форумчан лично нафиг не нужен. Если Вам хотелось бы разобраться, где ошибка или Вам необходимо это сделать, то приведите точный Makefile, который Вы используете. Чуток разъясните структуру проекта по Qt Creator - для примера, желательно, чтобы он был предельно простым: с наворотами уже позднее стоит разбираться. Если же Вам это не нужно, то маловероятно, что кому-то будет интересно разбираться в Ваших ошибках! ;) Только если, у этого кого-то не будет похожей задачки! ;) :)
JustOneQuestion Дата 20.5.2015, 17:11
  Так, если я правильно понял, то верятно разница между С и С++ вот в этих строках.
CFLAGS = -pipe -fno-keep-inline-dllexport -O2 -Wall -Wextra $(DEFINES)
CXXFLAGS = -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
Просто дальше, когда используется $(CXX) $(CC) то они везде используются одинаково за исключением флагов.
Например
$(CC) -c $(CFLAGS) $(INCPATH) -o release\file1.o ..\file1.c
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

А вот в qmake.conf в win32-g++ Есть вот такое.

QMAKE_CFLAGS = -pipe -fno-keep-inline-dllexport
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -Wall -Wextra
QMAKE_CFLAGS_WARN_OFF = -w
QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections
QMAKE_CFLAGS_SSE2 = -msse2 -mstackrealign
QMAKE_CFLAGS_SSE3 = -msse3
QMAKE_CFLAGS_SSSE3 = -mssse3
QMAKE_CFLAGS_SSE4_1 = -msse4.1
QMAKE_CFLAGS_SSE4_2 = -msse4.2
QMAKE_CFLAGS_AVX = -mavx
QMAKE_CFLAGS_AVX2 = -mavx2
QMAKE_CFLAGS_NEON = -mfpu=neon

QMAKE_CXX = $${CROSS_COMPILE}g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_CXXFLAGS_CXX11 = -std=c++0x
QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS

Там конечно ещё много чего. Но если четсно, то не сочтите за ленивость, но мне важно чтобы дейвас заработал и я код мог для НЕГО написать... а вот разбираться во всех параметрах всёже немного не моя область. Пока что проблем с проектом у меня нет, и я пожалуй до следущих проблем :) отложу свой интузиазм копания в настройках Qt.
Однако, если есть вопросы, касательно моего кода.. всмысле ТАКОГО кода, который работает в командной строке и QtCreator по разному, то вы спрашивайте, предлагайте что хотите проверить и какие стоят где настройки. Может это кому-то окажется полезным. Буду рад.

Litkevich Yuriy Дата 17.5.2015, 0:17
  Извиняюсь, что пропал.
Цитата(JustOneQuestion @ 13.5.2015, 13:53) *
Где написано что все файлы проекта должны быть одного типа?...Почему g++ умеет работать с разными типамиа QtCreator нет?
Собственно поэтому я и хотел, чтобы в Makefile была найдена результирующая строка, чтобы увидеть какие опции скармливаются компилятору.

Цитата(JustOneQuestion @ 11.5.2015, 16:41) *
Я не понимаю что нужно искать. Поясните пожалуйста.Но строку типа "g++ ......" я не видел ни в одном из этих файлов.
строки типа g++ ... не найдёшь, т.к. компилятор присваивается переменной, и далее она используется:
CC            = gcc
CXX           = g++

т.е искать нужно:
$(CXX) ...
или
$(CC) ...

qmake генерит Makefile на основе правил указанных для конкретного компилятора в папке %QTDIR%/mkspecs/<компилятор>
Для MinGW это обычно папка %QTDIR%/mkspecs/win32-g++
посмотри там файл qmake.conf
для qmake существуют переменные управляющие генерацией Makefile ты увидишь их в qmake.conf

А вообще для успешной сборки смешанного Си/С++ проекта, нужно в заголовочниках указывать компилятору как декорировать имена:
extern "C" {...}

AD Дата 14.5.2015, 0:36
 
Цитата(JustOneQuestion @ 13.5.2015, 12:53) *
Теперь вопрос. А почему оно так? )
Где написано что все файлы проекта должны быть одного типа?...Почему g++ умеет работать с разными типамиа QtCreator нет?.. Почему производитель выдал пример в котором разные типы файлов (c и cpp), всмысле он жеж явно это не специально засаду остраивал.. наверно были причины... но какие? )

Потому что при компиляции в командной строчке через задание опций g++ Вы не создаете Makefile (для Qt Creator - это pro-файл) и четко говорите, что хотите компилировать по правилам С++. Если бы вы файлы *.c задали через опции gcc, тогда бы Вы компилировали бы проект по правилам C. И, вполне возможно, появились бы те же ошибки, что и при создании через Qt Creator проекта компиляции для C, а не C++.
Ну и, соответственно, при создании проекта через Qt Creator, IDE создает pro-файл автоматически, в котором четко определено по каким правилам (C or C++) и как именно надо компилировать и собирать.

Поэтому если Вы хотите знать, из-за чего у Вас не собирается под C проект, то необходимо привести полный список ошибок, причем не в собственной интерпретации, а в том виде, что выдал компилятор. Так будет проще пояснить из-за чего сборка провалилась. Подозреваю, что дело, скорее всего, в специфике использования C++ возможностей, которых нет в C.
JustOneQuestion Дата 13.5.2015, 11:53
 
Цитата(AD @ 11.5.2015, 17:53) *
А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции.


Так.. нуу, что я могу сказать, Большое спасибо,Litkevich Yuriy, за совет. После сей нехитрой процедуры, всё скомпилилось без ошибок. И более того екзешник вроде тоже ведёт себя адекватно. .. Я не могу его проверить полностью, так как ему для этого воткнутое устройство надо, а у меня его сейчас нет у компа. Но в целом вроде всё норм
Проверил снова g++ когда все файлы cpp. Вроде тоже всё хорошо. Разницы не видно(что раньше что после смены расширения) - всё вроде работет адекватно.
Более того. Проверил на g++ вариант когда все файлы *.с (вместо cpp) - Всё ок. Всё работает.
Проверил на QtCreator создать новый проект на С (не с++) и все файлы сделать *.С. Не работает. В отлии от g++.


Тоесть ещё раз.
g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe через cmd.exe (c указанием переменных среды через батник или руками) работает
а вот QtCreator работает только если file1 file2 file3 имеют одинаковое для всех расширение *.cpp( а не как было, один *.cpp а остальные *.c).
Если все файлы для строки "g++...." (в cmd.exe) сделать *.c то оно работает. А вот QtCreator выдаёт ошибки(другие... разные).
В этом сосбвтенно и заключалась РАЗНИЦА QtCreator vs CMD.exe.

Теперь вопрос. А почему оно так? )
Где написано что все файлы проекта должны быть одного типа?...Почему g++ умеет работать с разными типамиа QtCreator нет?.. Почему производитель выдал пример в котором разные типы файлов (c и cpp), всмысле он жеж явно это не специально засаду остраивал.. наверно были причины... но какие? )



ААА.... Как тут редактировать свои сообщения то?. Я там ошибся с ником.
Большое спасибо конечно AD за совет!
Цитата(AD @ 11.5.2015, 17:53) *
А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции.

Нажал на кнопку "+ Спасибо"
AD Дата 11.5.2015, 17:53
  А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции.
JustOneQuestion Дата 11.5.2015, 14:41
 
Цитата(Litkevich Yuriy @ 10.5.2015, 21:39) *
У тебя библиотека лежит среди исходников?

Да. Библиотека libUstroystvo.a, исходники pro файл, файл проекта всё в одной папке. Только во время сборки тут же создаётся ещё одна папка TmpResult в которой *.o debug release make файлы.(Я так понял это называется Теневая сборка)
Пробовал создать проект без Qt (при создании проектов есть 6 шаблонов. я использовал тот что для с++ и qmake). В итоге в профайле появляется
CONFIG -= qt
Не знаю поддерживает ли библиотека *.а дебаг режим, поэтому убрал галочку с "отладка" - теперь у меня только "выпуск".
Поставил Qt(MinGw) на другом компе на котором до этого не было ни mingw ни qt; было Windows 7 и MS VS2010. Резльутат - теже ошибки что и тут. На своём компе всё переставил заново - таже история, теже ошибки что и раньше.

Так.. про make файлы... во первых их три... я не понимаю почему но. Есть просто make; есть make.release; и ... make.debug. Откуда послденее ... ннне знаю.
В make.release есть вот такое (Я проект ща обозвал ProjectTestNoQt. )
INCPATH = -I"..\..\ProjectTestNoQt" -I"." -I"..\..\ProjectTestNoQt" -I"C:\ProgramFiles\Qt\Qt5.4.1\5.4\mingw491_32\mkspecs\win32-g++"
LINKER = g++
LFLAGS = -Wl,-s -Wl,-subsystem,console -mthreads
LIBS = -LD:/Work/QtMy/ProjectTestNoQt/ProjectTestNoQt/ -lUstroystvo
В make "просто" ничего подобного не заметил.

Цитата(Litkevich Yuriy @ 10.5.2015, 21:39) *
найди запись, где окончательная сборка бинаря осуществляется сравни инструкции с теми, что ты в командной строке выполнял.

Я не понимаю что нужно искать. Поясните пожалуйста.
Но строку типа "g++ ......" я не видел ни в одном из этих файлов.




Litkevich Yuriy Дата 10.5.2015, 20:39
  JustOneQuestion, У тебя библиотека лежит среди исходников?

Надо глянуть какой получился Makefile.Release (или Makefile.Debug, если ты отладочную версию собирал)

Во-первых, шапку - пути и библиотеки, во-вторых, найди запись, где окончательная сборка бинаря осуществляется сравни инструкции с теми, что ты в командной строке выполнял.

Цитата(JustOneQuestion @ 7.5.2015, 23:38) *
Я нигде не видел дефайна для _WIN32 или __CYGWIN__. А оно жеж должно где-то быть?! )
помоему это в компиляторе зашито, но для MinGW __CYGWIN__ будет неопределён.


И, да, главное. Судя по команде:
g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe
Это приложение не использует Qt, иначе тебе бы пришлось ещё путь до заголовочников Qt указывать и библиотеки.

Тогда можешь уменьшить мусор в Makefile, добавив в pro-файл строчку:
CONFIG -=qt
JustOneQuestion Дата 7.5.2015, 21:38
  Так, ну хорошо. По шагам тогда распишу.
QtCreartor->Новый проект->[Шаблон: Другой проект]EmptyQmakeProject =>KitSelection:Desktop Qt 5.4.1 MinGW 32bit [просто по умолчанию] . Больше ничего не добавляем не меняем и жмём ок.
Далее ДеревоПроекта->Добавить существующие файлы. Добавляем пять *.h, два *.с и один *.cpp. (Main в последнем) Видим что файлы появились в дереве проекта.
Далее добавляем библиотеку. Вообще-то в примере есть файлы и *.dll и *.а, но *.lib нет. Добавлять буду только *.a. ДеревоПроекта->Добавить существующую библиотеку->Внешняя->Платформа только Windows; Компановка: Динамическая; Галочку про суффикс убрал.

В итоге имеем pro файл
HEADERS += \
    File1.h \
    File2.h \
    Ustroystvo.h \
    Ustroystvo_error_codes.h \
    Ustroystvo_types.h

SOURCES += \
    FileMain.cpp \
    File1.c \
    File2.c

win32: LIBS += -L$$PWD/ -lUstroystvo

INCLUDEPATH += $$PWD/
DEPENDPATH += $$PWD/

Далее ставим выпуск вместо отладки.
Сборка->запустить qmake. //Успешно без ошибок.
Сборка->Собрать проект” ProjectTest”
И вот тут возникает приличное кол-во ошибок. Где-то 20 варнингов и 20 ошибок. Варнинги типа сравнения инта с безнаковым, неиспользуемые переменные и прочее.
А вот ошибки почти все однотипные.
Цитата
undefined reference to `SomeOneFunc(_dictionary_*, char const*, int)'
more undefined references to ` SomeOneOtherFunc(_dictionary_*, char const*, int)' follow

И в конце вот такое ещё есть
Цитата
C:/ProgramFiles/QtMinGW/Tools/mingw491_32/bin/../lib/gcc/i686-w64-mingw32/4.9.1/../../../../i686-w64-mingw32/bin/ld.exe: release/ FileMain.o: bad reloc address 0x14 in section `.text$_ZStplIcSt11char_traitsIcESaIcEESbIT_T0_T1_ERKS6_S8_[__ZStplIcSt11char_trai
tsIcESaIcEESbIT_T0_T1_ERKS6_S8_]'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [release\ProjectTest.exe] Error 1
mingw32-make: *** [release] Error 2
00:15:43: Процесс «C:\ProgramFiles\QtMinGW\Tools\mingw491_32\bin\mingw32-make.exe» завершился с кодом 2.
Ошибка при сборке/установке проекта ProjectTest (комплект: Desktop Qt 5.4.1 MinGW 32bit)
Во время выполнения этапа «Сборка»

Функции в которых ошибки вообще-то не библиотечные, а те, что описаны в File1.c /.h

Вот если честно, у меня подозрения на qmake –spec … По и дее там же добавляется много всего… , а вот что делает g++ в командной строке
g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe
? Использует ли он то же, что и в qmake или он вообще ничего не использует или своё что-то использует.
В коде есть места типа
#if defined _WIN32 || defined __CYGWIN__
      #define SCTDCDLL_PUBLIC __declspec(dllexport)

А вот SCTDCDLL_PUBLIC как раз таки используется в ашнике к библиотеке. НО! Я нигде не видел дефайна для _WIN32 или __CYGWIN__. А оно жеж должно где-то быть?! )
Причём и g++ и QtCreator должны знать про этот дефайн. … Значит у них есть какие-то дефайны и какие-то настройки по умолчанию. Может быть они различны? Может быть в это проблема?

Последнее это просто предположение, А вот описание ошибок и способ создания проекта я по вашим просьбам описал.


А да, QtCreator рабочий. Его родные примеры работают. Свои проекты создавал, всё вроде норм. Проблем не замечал.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 17:35