'qt static'에 해당되는 글 3건

  1. 2018.03.23 5.10.1 static build error 2
  2. 2016.04.28 libwinpthread 가 계속 동적 빌드만 될 때
  3. 2015.09.17 QT static build with mingw32

5.10.1 static build error

QT 2018. 3. 23. 15:07

5.7.1 에서는 안그랬다.


5.10.1 소스 다운 받아서 압축 풀고 configure 해주고 빌드를 시작하니

아래와 같은 에러가 뜨면서 qmake.exe 가 죽었다는 에러 창이 떴다.


ASSERT: "isAbsolutePath(baseDir)" in file C:/Qt/5.10.1/qtbase/qmake/library/ioutils.cpp, line 106


구글링 결과 configure 후에 생기는 qtbase/bin/qt.conf 파일의 path 들이

내 시스템(windows)에 맞게 되지 않고 linux 기준으로 작성되어 생기는 문제였다.


참고로 내 qt.conf 파일 내용은 아래와 같다.


[EffectivePaths]

Prefix=..

[DevicePaths]

Prefix=/usr/local/Qt-5.10.1

[Paths]

Prefix=/usr/local/Qt-5.10.1

HostPrefix=/usr/local/Qt-5.10.1

Sysroot=

SysrootifyPrefix=false

TargetSpec=win32-g++

HostSpec=win32-g++


굵게 표기된 3군데 경로를 아래와 같이 내 경로로 수정하였다.


[EffectivePaths]

Prefix=..

[DevicePaths]

Prefix=C:/Qt/5.10.1

[Paths]

Prefix=C:/Qt/5.10.1

HostPrefix=C:/Qt/5.10.1

Sysroot=

SysrootifyPrefix=false

TargetSpec=win32-g++

HostSpec=win32-g++


저장하고 다시 빌드를 하니 잘 돌아간다.


참고: http://www.qtcentre.org/threads/69198-ASSERT-quot-isAbsolutePath(baseDir)-quot-error-when-trying-to-build

'QT' 카테고리의 다른 글

버전 정보 넣기  (0) 2016.09.26
undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
Posted by 독뽀
,

환경: QtCreator3.4.2 / mingw4.9.2 / Qt 4.8.6 static


QThread 를 사용하고 정적 빌드를 하려니 libwinpthread 에 대한 의존성이 생겼나보다.


구글링을 해보니


http://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw


요약) -static -lpthread 붙여라


이 답변을 확인하게 되었는데,

막상 위 옵션을 QtCreator의 빌드 옵션에서 컴파일러 옵션에 넣어봤는데 도무지 동작하지가 않았다.

위 링크가 또 다른 여러 곳에서 링크되어 있는 것으로 봐서는 아마도 맞는 답변이지 싶은데 말이다.


컴파일 로그를 살펴보니 다음과 같았다.


...

g++ -static-libgcc -static-libstdc++ -Wl,-s -Wl,-subsystem,windows -o release\sample.exe object_script.trainer.Release  -L"c:\Qt\4.8.6_static\lib" -lmingw32 -lqtmain -lQtXml -lQtGui -lQtNetwork -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32


어라..? 내가 추가 한 -static -lpthread가 보이지 않았다.


여러가지 찾아 보다 알아낸 결과는 아래와 같다.


*.pro 파일 내에 사용할 라이브러리를 추가 한다.

LIBS += -static -lwinpthread


나같은 경우 위와 같이 추가하고 빌드한 결과 컴파일 로그에 다음과 같이 추가된 것을 확인할 수 있었다.


g++ -static-libgcc -static-libstdc++ -Wl,-s -Wl,-subsystem,windows -o release\sample.exe object_script.trainer.Release -L"c:\Qt\4.8.6_static\lib" -lmingw32 -lqtmain -static -lwinpthread -lQtXml -lQtGui -lQtNetwork -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32


release 시에만 추가하고 싶다면

release {

LIBS += -static -lwinpthread

}

요렇게 해주면 release 시에만 정적으로 추가하게 된다.

'QT' 카테고리의 다른 글

undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
디버깅 매크로  (0) 2016.04.19
QByteArray 의 reserve() vs resize()  (0) 2016.03.18
QT static build with mingw32  (0) 2015.09.17
Posted by 독뽀
,

QT static build with mingw32

QT 2015. 9. 17. 13:52

웬만한건 이미지 파일에 묶어서 배포를 해서 따로 배포할 일이 없었지만..

별도 프로그램을 배포할 일이 생김 (상업용이 아니기 때문에 본인은 라이센스 문제에 해당되지 않았음)
따라서 번거로운 install 이나 별도 파일 배포를 막기 위해 정적 빌드를 알아봄

1. 동적 빌드는 qt 사이트에서 mingw32, sdk 및 qtcreator 로 작업해왔다면 별도의 설명은 하지 않겠음.
2. 정적 빌드
 - 1. 동적 빌드에서의 필수 구성 요소들이 설치되어 있다면 기존 버전과 같은 qt-everywhere... 소스 파일을 받아둔다.
 - 경로는 어디든 상관 없으나 본인 qt 설치 경로 아래에 static 이라고 두면 찾기 쉬움.
 - qt-everywhere.. 압축 파일을 C:\Qt\static 같은 곳에 푼다. 압축 파일의 이름으로 풀린 폴더 이름을 변경하였다.
 - 먼저 mingw32-make.exe 의 위치를 환경 변수에 등록 해준다. (본인은 C:\minGW32\bin 임)
 - cmd 창을 열고 static 폴더로 가서 README 와 INSTALL 파일을 읽어본다. 자세한 설명이 없다.
 - 바로 configure 를 해서 빌드하면 기존과 같은것이니 우리가 필요한 정적 precompile 환경을 만들도록 옵션을 주자.
   \> configure.exe -release -opensource -static -fast -no-qt3support -no-opengl -no-vcproj -no-phonon -no-audio-backend -no-declarative -nomake examples -nomake demos
 - 옵션은 configure.exe -help 를 치면 상세히 나온다. 나같은 경우 phonon 이 필요한데 저 옵션을 당연히 빼야겠지?
 - 예제가 필요하면 -nomake exmaples 를 빼면 된다. 본인이 찾는 qt 에서 제공하는 라이브러리는 help에서 나온 옵션에
 웬만하면 다 있다고 보면 된다. (무려 300라인이 넘어가서 여기 붙이진 않는다.)
 - configure 가 끝나면 mingw32-make sub-src 치면 빌드를 시작한다. (i7 - ssd - 16GB 인데도 한시간 넘게 걸림)
 - 본인은 에러가 안나서 어떤 삽질을 하지말라고 얘기를 못해주겠다. 문제가 있었으면 댓글 바람.
 - 이게 끝나고 나면 qtcreator 에서 어떤 Qt version 및 Tool chain 으로 할지 설정해서 빌드하면 끝이 난다.
 - 테스트는 release 모드로 놓고 빌드하고 생성된 실행 파일을 단독으로 실행해보면 된다.
  (qtcreator에서 run이 아니고 파일 경로로 가서 직접 실행)
 - 뭔가 오류가 나거나 이름을 모르겠다 싶으면 기존 qt project를 참조해보면 된다.
 - 가령 본인 mkspec 정확한 명칭을 모르겠다? qtcreator 에서 Tools > Options > Build & Run > Tool Chains 에서
본인이 사용 중인 Tool chain 을 선택해보면 제일 아래에 나온다. 
 
========================================================================
추가)
phonon 추가가 안됨.. static/src 쪽에 있는 3dparty 및 phonon 문제 추적 중..


========================================================================
추가)
http://doc.qt.io/qt-4.8/configure-options.html 에 가보면 -help 로 나오는 것보다 더 자세히 설명되어 있음.

-phononCompile the Phonon module.Phonon is built if a decent C++ compiler is used. This option denotes a default value and needs to be evaluated. If the evaluation succeeds, the feature is included.

evaluted.. 라이선스를 획득해야 하는 것으로 보임.

'QT' 카테고리의 다른 글

undefined reference to 'vtable for...'  (0) 2016.05.19
반투명 그릴 때 배경 잔상 문제  (0) 2016.05.11
libwinpthread 가 계속 동적 빌드만 될 때  (0) 2016.04.28
디버깅 매크로  (0) 2016.04.19
QByteArray 의 reserve() vs resize()  (0) 2016.03.18
Posted by 독뽀
,