qt 컴파일 질문 드립니다..
Makefile에서 LIBS -static 를 추가하고 컴파일하면 아래와 같은 문제가 생기는데 어떻게 해결을 해야할지 질문 드립니다.
-lqte-mt -ldl -lpthread -static
LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqte-mt -ldl -lpthread -static
/home/qte-3.3.3/lib -L/usr/arm-linux/lib -lqte-mt -ldl -lpthread -static
/home/qte-3.3.3/lib/libqte-mt.a(qlibrary_unix.o)(.text+0x44): In function `QLibraryPrivate::loadLibrary()':
: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/qte-3.3.3/lib/libqte-mt.a(qfileinfo_unix.o)(.text+0x210): In function `QFileInfo::group() const':
: warning: Using 'getgrgid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/qte-3.3.3/lib/libqte-mt.a(qfileinfo_unix.o)(.text+0x2ac): In function `QFileInfo::owner() const':
: warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
static 를 빼고 컴파일 하면 아무 문제 없이 컴파일 되는데 static 만 붙이면 문제가 되고 있습니다.
혹시 어디서 부터 봐야할지 조언 부탁드립니다.
링크 순서를
링크 순서를 바꾸세요.
libdl을 사용하는 오브젝트 뒤에 -ldl 을 위치시키세요.
OTL
알려주신 방법으로는 해결이 안되고 있습니다.
-ldl 위치를 바꾸어서 해보았지만 결과는 같게 나오네요..
binutils-2.15.91.0.1
gcc-3.4.2
gdb-6.4
glibc-2.3.3
glibc-linuxthreads-2.3.3
qt-3-3-3
과연 어떤 문제 때문인지 glibc-2.3.3버전 때문인지..??
... 아무튼
... 아무튼 라이브러리들의 링크 순서 때문에 그런 오류가 발생하는 것은 맞습니다.
단순무식하게 오브젝트, 라이브러리들의 순서를 잘 맞춰서 적어주는 방법과
링커 옵션중 --start-group/--end-group 을 사용해서 해결하는 방법이 있습니다.
OTL
답변을 매번 달아 주셔서 감사합니다.
제가 구체적으로 어떻게 해야될지를 이해 못하고 있습니다..ㅠㅠ
어떤식으로 해야할지...ㅠㅠ
자세하게 부탁드려도 될런지...
CC = arm-linux-gcc
CXX = arm-linux-g++
LEX = flex
YACC = yacc
CFLAGS = -pipe -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT
CXXFLAGS = -pipe -DQWS -fno-exceptions -fno-rtti -O2 -D_REENTRANT -DQT_NO_DEBUG -DQT_THREAD_SUPPORT
LEXFLAGS =
YACCFLAGS= -d
INCPATH = -I/home/qte-3.3.3/mkspecs/qws/linux-arm-g++ -I. -I$(QTDIR)/include
LINK = arm-linux-g++
LFLAGS = -Wl,-rpath,$(QTDIR)/lib
LIBS = $(SUBLIBS) -L$(QTDIR)/lib -lqte-mt -ldl -lpthread -static
메이크 파일이 이렇게 되어 있는데 어떻게 순서를 맞추라는 말씀이신지 잘이해가 가질 안네요..ㅠㅠ
지식이 워낙...ㅠㅠ
--start-group/--end-group
--start-group/--end-group
제가 Makefile에서 몇군데 추가는 해봤는데 전혀 변화가 없습니다..ㅠㅠ
all: Makefile $(TARGET)
$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS)
이부분에 추가도 해보고
여러군데 테스트는 해보았지만 어떻게 된건지 잘안되고 있네요...
$(LINK) $(LFLAGS) -o
대강대강 간단하게,
$(LINK) $(LFLAGS) -o $(TARGET) --start-group $(OBJECTS) $(OBJMOC) $(OBJCOMP) $(LIBS) --end-group
-static 옵션은 LIBS 가 아니라 LFLAGS 에 적어주시고요.
LINK 가 gcc 라면 -Wl,--start-group 처럼 적어주면 됩니다.
OTL
LINK g++이라면 어캐 해야될지..??
만약 arm-linux-g++이라면 어떻게 줘야할지..??
벌써 삽질 몇일째 하네요..ㅋㅋ
그럼 수고하세요.
마찬가지 입니다. -Wl
마찬가지 입니다. -Wl 은 ',' 뒤의 것을 링커에게 전달하라는 뜻입니다.
OTL
glibc와 관계된 문제 같네요.
링크 순서의 문제가 아니라 glibc가 runtime에 필요한 문제입니다.
놀랍게요 static으로 컴파일 해도 static으로 binary가 만들어지지 않는 경우가 많다네요.
http://forums.fedoraforum.org/showthread.php?t=65273
이 링크 답변을 참고하세요.
http://groups-beta.google.com/group/...4b2b7f639d812c
저도 bash를 안드로이드에 올리려고 하는데
저도 bash를 안드로이드에 올리려고 하는데 glibc 때문에 고민이네요.
저도 bash를 안드로이드에 올리려고 하는데
저도 bash를 안드로이드에 올리려고 하는데 glibc 때문에 고민이네요.
댓글 달기