crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QtCreator vs CMD.exe, Разница в работе
JustOneQuestion
  опции профиля:
сообщение 7.5.2015, 11:20
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 7.5.2015
Пользователь №: 4379

Спасибо сказали: 0 раз(а)




Репутация:   0  


Приветсвуйю людей знающих, опытных и отзывчивых.
С Qt впервые столкнулся после приобретения узко-специализированного устройста, библиотеки работы с которым были под Qt. С библиотеками шёл простой пример. Собственно одна папка с файлами *.c *.cpp *.h *.dll *.a, файлов .pro .lib и каких либо проектов нет. В reedme предлагалось запустить примемр через строку
g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe (я в ней названия поменял, для удобства. Main в file3.cpp находится если это важно)
ОС Windows 8.1, скачал и поставил Qt 5.4.1 for Windows 32-bit (MinGW 4.9.1, 856 MB) ( www.qt.io/download-open-source/ )
И через Qt 5.4 for Desktop (MinGW 4.9 32 bit) (ярлык в "меню пуск".. в плитках) запустил (вроде как) аналог cmd.exe (с батником который переменные среды прописывает) и в нем (находясь в директории с файлами примера) использовал
g++ file1.c file2.c file3.cpp -l:libUSTROYSTVO.a -o result.exe
Всё хорошо, без ошибок, получился екзешник примера, который вполне себе работает как нужно.

Но попробовав создать проект в QtCreator и добавить в него файлы примера, чтобы работать в IDE(мне так прривычнее... уж простите если это не по православному... я не в курсе был :) ), у меня на этапе сборки проекта вылезло множество ошибок. В качестве примера создания проекта я использовал Empty Qmake Project.

Не важно, вобщем-то, что за ошибки вылезли, главное мне хотелось бы понять, почему и как исправить то, что через командную строку всё работает, а через QtProject нет(пока)? Как правильно создать проект, который бы точно также реагировал на код как и командная строка...?

Всем, кто не поленился это прочитать, спасибо и всего вам хорошего.


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.5.2015, 12:03
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(JustOneQuestion @ 7.5.2015, 13:20) *
Не важно, вобщем-то, что за ошибки вылезли,
Важно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JustOneQuestion
  опции профиля:
сообщение 7.5.2015, 12:49
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 7.5.2015
Пользователь №: 4379

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 7.5.2015, 12:03) *
Цитата(JustOneQuestion @ 7.5.2015, 13:20) *
Не важно, вобщем-то, что за ошибки вылезли,
Важно.

Разбор ошибок это отдельная тема и работа.
Меня интересует свод правил для того чтобы создать проект с таими настройками, чтобы он работал с кодом так же как и "g++ Параметры****" в командной строке.
Если всплывают ошибки, то это значит что уже есть какието различия в способе компиляции.
У меня есть предположения QtCreator использует qmake -spec с определёнными параметрами которые находятся в mkspec файлах, а вот g++ вероятно либо вобще не использует ничего такого, либо использует что-то ... но другое (отличное от того что QtCreator).

При такой постановке вопроса, вроде бы действительно не важно что за ошибки вылазиют. важно лишь их наличие. Или я что-то не учёл, и есть аргументы против?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 7.5.2015, 16:56
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Ошибки вылезли потому, что скорее всего не правильно создал и настроил проект.
Или не правильно настроил переменные среды самого Qt Creator.

А в описании ошибки говорится, что ты не правильно сделал и в принципе опытному человеку ошибка говорит, что нужно подкрутить, чтобы все заработало...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 7.5.2015, 17:53
Сообщение #5


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(JustOneQuestion @ 7.5.2015, 11:20) *
Не важно, вобщем-то, что за ошибки вылезли
Важно. Хотя бы для того, что бы понять, это ошибки компиляции или линковки. В первом случае, скорее всего, не все исходники в проект добавил. Во втором, не подключил библиотеку libUSTROYSTVO.
В общем, что бы разобраться, нужны .pro файл и вывод компилятора.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JustOneQuestion
  опции профиля:
сообщение 7.5.2015, 21:38
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 7.5.2015
Пользователь №: 4379

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так, ну хорошо. По шагам тогда распишу.
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 рабочий. Его родные примеры работают. Свои проекты создавал, всё вроде норм. Проблем не замечал.

Сообщение отредактировал ViGOur - 8.5.2015, 9:54
Причина редактирования: Не забываем про теги code и quote
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.5.2015, 20:39
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


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
  опции профиля:
сообщение 11.5.2015, 14:41
Сообщение #8


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 7.5.2015
Пользователь №: 4379

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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++ ......" я не видел ни в одном из этих файлов.




Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 11.5.2015, 17:53
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


А что современные g++ умеют одновременно собирать проекты, где есть файлы с *.c и *.cpp? Попробуйте, для эксперимента, все файлы переименовать в *.cpp. И выдайте на форум конкретный список ошибок, после данной операции.

Сообщение отредактировал AD - 11.5.2015, 17:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JustOneQuestion
  опции профиля:
сообщение 13.5.2015, 11:53
Сообщение #10


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 7.5.2015
Пользователь №: 4379

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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. И выдайте на форум конкретный список ошибок, после данной операции.

Нажал на кнопку "+ Спасибо"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.8.2022, 0:44