Здравствуйте, гость ( Вход | Регистрация )
JustOneQuestion | Дата 21.5.2015, 0:19 |
Если же Вам это не нужно, то маловероятно, что кому-то будет интересно разбираться в Ваших ошибках! ![]() ![]() ![]() Вот то-то и оно что код не я писал, и рекомендации к использыванию тоже. ... Но учитывая, что всё же решение использовать QtCreator принадлежало мне и не упоминалось в рекомендация от разработчиков... то вопрос чьи ошибки не самый тривиальный ). Но не в этом суть. Главное то, что мы с коллегами не уверены в том, что можем(что это хотябы порядочно) выкладывать код примеров и упоминать разработчика и производителя этого устройства и софта. Я собственно по этому старался менять имена файлов, ибо они уж очень "именные", ну и как следствие в мэйкфайлах их очень много. Заменить в них все названия... честно говоря, не уверен что можно без ошибок... их там ну очень много. И ладно бы, если б была бы чёткая уверенность что ошибки и проблемы софта и девайса точно производителя а не наши - написали бы уж, не стесняясь. Но учитывая отуствие должно опыта в Qt для такого утверждения у нас нет, мы решили что лучше этого не делать. Ибо можно говорить что это разработчики кривые,... а окажется что это не они а наши руки ))) Не красиво както ) Так что вы уж извините пожалуйста, дело не в том что мы боимся что кто-то сопрёт наш гениальный код состоящий из пары for'ов ) а чисто из за того, что бы не возникло неверного мнения о производители. Девайсина конечно с нереальными и уникальными параметрами.... но и с кучей правил в использовании и особенностями, которые могут быть воприняты как баги, при не слишком внимательном изучении. Да и просто отпугнуть сложностью. ... Не, конечно это не наше дело и никаких законов мы однозначно не нарушим. Просто вопрос порядочности. А вот что касается так именно про это я и хотел сказать в прошлом посте. Что если нужно что-то проверить на ЭТОМ коде, то я попробовать могу. ) Вдруг поможет кому-то с подобной проблемой ) Только если, у этого кого-то не будет похожей задачки! Если же Вам это не нужно, то маловероятно, что кому-то будет интересно разбираться в Ваших ошибках! ![]() ![]() ![]() Вот то-то и оно что код не я писал, и рекомендации к использыванию тоже. ... Но учитывая, что всё же решение использовать QtCreator принадлежало мне и не упоминалось в рекомендация от разработчиков... то вопрос чьи ошибки не самый тривиальный ). Но не в этом суть. Главное то, что мы с коллегами не уверены в том, что можем(что это хотябы порядочно) выкладывать код примеров и упоминать разработчика и производителя этого устройства и софта. Я собственно по этому старался менять имена файлов, ибо они уж очень "именные", ну и как следствие в мэйкфайлах их очень много. Заменить в них все названия... честно говоря, не уверен что можно без ошибок... их там ну очень много. И ладно бы, если б была бы чёткая уверенность что ошибки и проблемы софта и девайса точно производителя а не наши - написали бы уж, не стесняясь. Но учитывая отуствие должно опыта в Qt для такого утверждения у нас нет, мы решили что лучше этого не делать. Ибо можно говорить что это разработчики кривые,... а окажется что это не они а наши руки ))) Не красиво както ) Так что вы уж извините пожалуйста, дело не в том что мы боимся что кто-то сопрёт наш гениальный код состоящий из пары for'ов ) а чисто из за того, что бы не возникло неверного мнения о производители. Девайсина конечно с нереальными и уникальными параметрами.... но и с кучей правил в использовании и особенностями, которые могут быть воприняты как баги, при не слишком внимательном изучении. Да и просто отпугнуть сложностью. ... Не, конечно это не наше дело и никаких законов мы однозначно не нарушим. Просто вопрос порядочности. А вот что касается Только если, у этого кого-то не будет похожей задачки! так именно про это я и хотел сказать в прошлом посте. Что если нужно что-то проверить на ЭТОМ коде, то я попробовать могу. ) Вдруг поможет кому-то с подобной проблемой ) Так... я прошу прощение за странность такого поста.... я так и не понял КАК тут можно редактировать СВОЙ ПОСТ! ))) Админы,... кнопочку РЕДАКТИРОВАТЬ пожалуйста добавте... ииили скажите где она тут у вас .... ну и поправте если можно пост. ) |
|
AD | Дата 20.5.2015, 23:37 |
Так, если я правильно понял, то верятно разница между С и С++ вот в этих строках. 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 - флаги С, соответственно. Там конечно ещё много чего. Но если четсно, то не сочтите за ленивость, но мне важно чтобы дейвас заработал и я код мог для НЕГО написать... а вот разбираться во всех параметрах всёже немного не моя область. Пока что проблем с проектом у меня нет, и я пожалуй до следущих проблем ![]() Однако, если есть вопросы, касательно моего кода.. всмысле ТАКОГО кода, который работает в командной строке и QtCreator по разному, то вы спрашивайте, предлагайте что хотите проверить и какие стоят где настройки. Может это кому-то окажется полезным. Буду рад. Вот гадом буду, если ошибусь во мнении, но, на мой взгляд, оно будет у всех отвечающих форумчан! ![]() ![]() ![]() ![]() |
|
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 Там конечно ещё много чего. Но если четсно, то не сочтите за ленивость, но мне важно чтобы дейвас заработал и я код мог для НЕГО написать... а вот разбираться во всех параметрах всёже немного не моя область. Пока что проблем с проектом у меня нет, и я пожалуй до следущих проблем ![]() Однако, если есть вопросы, касательно моего кода.. всмысле ТАКОГО кода, который работает в командной строке и QtCreator по разному, то вы спрашивайте, предлагайте что хотите проверить и какие стоят где настройки. Может это кому-то окажется полезным. Буду рад. |
|
Litkevich Yuriy | Дата 17.5.2015, 0:17 |
Извиняюсь, что пропал. Где написано что все файлы проекта должны быть одного типа?...Почему g++ умеет работать с разными типамиа QtCreator нет? Собственно поэтому я и хотел, чтобы в Makefile была найдена результирующая строка, чтобы увидеть какие опции скармливаются компилятору.Я не понимаю что нужно искать. Поясните пожалуйста.Но строку типа "g++ ......" я не видел ни в одном из этих файлов. строки типа g++ ... не найдёшь, т.к. компилятор присваивается переменной, и далее она используется:
т.е искать нужно: $(CXX) ... или $(CC) ... qmake генерит Makefile на основе правил указанных для конкретного компилятора в папке %QTDIR%/mkspecs/<компилятор> Для MinGW это обычно папка %QTDIR%/mkspecs/win32-g++ посмотри там файл qmake.conf для qmake существуют переменные управляющие генерацией Makefile ты увидишь их в qmake.conf А вообще для успешной сборки смешанного Си/С++ проекта, нужно в заголовочниках указывать компилятору как декорировать имена:
|
|
AD | Дата 14.5.2015, 0:36 |
Теперь вопрос. А почему оно так? ) Где написано что все файлы проекта должны быть одного типа?...Почему 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 |
А что современные 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 за совет! А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции. Нажал на кнопку "+ Спасибо" |
|
AD | Дата 11.5.2015, 17:53 |
А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции. | |
JustOneQuestion | Дата 11.5.2015, 14:41 |
У тебя библиотека лежит среди исходников? Да. Библиотека 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 "просто" ничего подобного не заметил. найди запись, где окончательная сборка бинаря осуществляется сравни инструкции с теми, что ты в командной строке выполнял. Я не понимаю что нужно искать. Поясните пожалуйста. Но строку типа "g++ ......" я не видел ни в одном из этих файлов. |
|
Litkevich Yuriy | Дата 10.5.2015, 20:39 |
JustOneQuestion, У тебя библиотека лежит среди исходников? Надо глянуть какой получился Makefile.Release (или Makefile.Debug, если ты отладочную версию собирал) Во-первых, шапку - пути и библиотеки, во-вторых, найди запись, где окончательная сборка бинаря осуществляется сравни инструкции с теми, что ты в командной строке выполнял. Я нигде не видел дефайна для _WIN32 или __CYGWIN__. А оно жеж должно где-то быть?! ) помоему это в компиляторе зашито, но для MinGW __CYGWIN__ будет неопределён.И, да, главное. Судя по команде: Это приложение не использует 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 файл
Далее ставим выпуск вместо отладки. Сборка->запустить 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 или он вообще ничего не использует или своё что-то использует. В коде есть места типа
А вот SCTDCDLL_PUBLIC как раз таки используется в ашнике к библиотеке. НО! Я нигде не видел дефайна для _WIN32 или __CYGWIN__. А оно жеж должно где-то быть?! ) Причём и g++ и QtCreator должны знать про этот дефайн. … Значит у них есть какие-то дефайны и какие-то настройки по умолчанию. Может быть они различны? Может быть в это проблема? Последнее это просто предположение, А вот описание ошибок и способ создания проекта я по вашим просьбам описал. А да, QtCreator рабочий. Его родные примеры работают. Свои проекты создавал, всё вроде норм. Проблем не замечал. |
|
Просмотр темы полностью (откроется в новом окне) | |
![]() |
Текстовая версия | Сейчас: 18.4.2025, 19:35 |