2013-12-19 4 views
2

QT를 크로스 컴파일러 gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi을 사용하여 교차 컴파일하고 make 동안 다음 오류가 발생합니다.교차 컴파일 QT

누구와 관련이 있는지 알고 있습니까?

일부 컴파일러가 다른 컴파일러로 컴파일 된 것처럼 보이는데 이제는 일치하지 않는 것 같습니다. 나는이 시점에서 글을 쓸 수 있는가?

이 문제는 어떻게 해결해야합니까?

/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-g++ -Wl,-rpath-link,/mnt/freescale/ltib_10.04_gtt/ltib/rootfs/usr/lib -Wl,-O1 -Wl,-rpath,/opt/qt5/lib -o ../../bin/qmlbundle .obj/main.o -L/mnt/freescale/ltib_10.04_gtt/ltib/rootfs/usr/lib -L/home/user/Downloads/qt5/qtdeclarative/lib -lQt5Qml -L/home/user/Downloads/qt5/qtbase/lib -lQt5Network -lQt5Core -lpthread 

.obj/main.o: In function `showHelp()': 
main.cpp:(.text+0x2e0): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x310): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x368): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x3a0): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x3d0): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x408): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x438): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x470): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x4a0): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x4d8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x508): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x540): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x570): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x5a8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x5d8): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x610): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x640): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x678): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x6a8): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x700): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x738): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x768): undefined reference to `std::ctype<char>::_M_widen_init() const' 
.obj/main.o: In function `usage(QString const&, QString const&)': 
main.cpp:(.text+0x834): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x868): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0x8c0): undefined reference to `std::ctype<char>::_M_widen_init() const' 
main.cpp:(.text+0xa78): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0xaa8): undefined reference to `std::ctype<char>::_M_widen_init() const' 
.obj/main.o: In function `main': 
main.cpp:(.text+0x1ebc): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)' 
main.cpp:(.text+0x1ef4): undefined reference to `std::ctype<char>::_M_widen_init() const' 
collect2: ld returned 1 exit status 
make[3]: *** [../../bin/qmlbundle] Error 1 

나는 그것이 중요하지만, 사람이 내가 프리 스케일 iMX51 (코어 텍스 A8)에 대한 QT 5.2.0을 구축하고 궁금하면 생각하지 않습니다.

./configure -v -opensource -confirm-license -opengl es2 -make libs -device imx5 \ 
-nomake examples -nomake tests \ 
-skip qtsvg -skip qtdeclarative -skip qtwebkit -skip qtconnectivity -skip qtmultimedia -skip qtlocation -skip qtactiveqt -qt-freetype -no-openssl -no-nis -no-pch -no-dbus \ 
-skip qtmacextras -skip qtsensors -skip qtserialport \ 
-device-option CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi- \ 
-sysroot /mnt/freescale/ltib_10.04_gtt/ltib/rootfs -no-gcc-sysroot \ 
-prefix /opt/qt5 

imx5의 qmake.conf 실제로 다운로드되고 이런 식으로 내용 외모 :

include(../common/linux_device_pre.conf) 

EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_imx5.cpp 

QMAKE_INCDIR   += $$[QT_SYSROOT]/usr/include 
QMAKE_LIBDIR   += $$[QT_SYSROOT]/usr/lib 

QMAKE_LIBS_EGL   += -lEGL 
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL 
QMAKE_LIBS_OPENVG  += -lOpenVG -lEGL 

QMAKE_LFLAGS   += -Wl,-rpath-link,$$[QT_SYSROOT]/usr/lib 

IMX5_CFLAGS    = -march=armv7-a -mfpu=neon -D_LINUX 
IMX5_CFLAGS_RELEASE  = -O2 $$IMX5_CFLAGS 
QMAKE_CFLAGS_RELEASE += $$IMX5_CFLAGS_RELEASE 
QMAKE_CXXFLAGS_RELEASE += $$IMX5_CFLAGS_RELEASE 
QMAKE_CFLAGS_DEBUG  += $$IMX5_CFLAGS 
QMAKE_CXXFLAGS_DEBUG += $$IMX5_CFLAGS 

include(../common/linux_device_post.conf) 

load(qt_config) 
+0

어떤 보드, 플랫폼 및 아키텍처를 크로스 컴파일 할 수 있는지 설명 할 수 있습니까? –

+0

@vinayhunachyal, 나는이 것들이 중요하다고 생각하지 않지만 귀하의 질문에 대한 답변을 볼 수 있습니다! – theAlse

+0

-uvice를 구성 할 때 구성이 중요합니다. < > 예 : linux-rasp-pi-g ++ 또는 -xplatform linux-g ++ - mx5x -release는 장치의 mkspeck입니다. Qt를 컴파일하는 방법을 공유 하시겠습니까? –

답변

0

내가 십자가를 내가 메이크업 전에 QT 5.2.0을 구성하고 어떻게

입니다 - gcc 4.8.0을 사용하여 x86_64 용 Qt 5.0.2를 컴파일합니다. 내가 -no-gcc-sysroot을 지정하고 있지 않다

  • : 구성하는 동안

    : 나는 당신의 빌드에서 몇 가지 잠재적으로 관련 차이가났습니다.

  • -device-option TOOL_DIR=$(TOOL_DIR)을 지정합니다. TOOL_DIR은 툴체인의 최상위 디렉토리입니다 (예 : 내 교차 -g ++는 $(TOOL_DIR)/bin/ 임). 이것은 아래 qmake.conf에서 사용됩니다.
  • 저는 -platform 인수를 사용하고 있습니다 (기본값은 linux-g++-64으로 생각합니다). 내 qmake.conf에서

:

  • 그 파일의 내용은, deviceSanityCheckCompiler에 전화를 제외하고, 나에게 관련되지 않은, 나는이 linux_device_post.conf에 포함되지 않습니다 QMAKE_INCDIR = $${TOOL_DIR}/include $$[QT_SYSROOT]/usr/include
  • 를 지정하는 나는 qmake.conf에 추가했다.

    cd $(QT_DIR) && PATH=$(QT_PATH) ./configure -v \ 
         -prefix $(ROOT_DIR) \ 
         -sysroot $(ROOT_DIR) \ 
         -headerdir $(TOOL_DIR)/include \ 
         -hostprefix $(TOOL_DIR) \ 
         -datadir $(TOOL_DIR) \ 
         -examplesdir $(TOOL_DIR) \ 
         -testsdir $(TOOL_DIR) \ 
         -platform linux-g++-64 \ 
         -device linux-vendorname-g++ \ 
         -device-option CROSS_COMPILE=$(TARGET)- \ 
         -device-option TOOL_DIR=$(TOOL_DIR) \ 
         -opensource \ 
         -confirm-license \ 
         -no-accessibility \ 
         -no-javascript-jit \ 
         -no-gui \ 
         -no-widgets \ 
         -no-gif \ 
         -no-libpng \ 
         -no-libjpeg \ 
         -no-openssl \ 
         -no-xcb \ 
         -no-opengl \ 
         -no-glib \ 
         -no-dbus \ 
         -no-cups \ 
         -no-pkg-config \ 
         -optimized-qmake \ 
         -reduce-relocations \ 
         -reduce-exports \ 
         -release \ 
         -make libs \ 
         -no-pch 
    

    ROOT_DIR는 루트 파일의 최상위이며, Qt는 라이브러리에 설치 얻을 것이다 곳이다 :

여기 (메이크 파일의 일부) 내 구성 명령입니다.

QT_DIR은 최상위 Qt 소스 디렉토리 (Qt 빌드가 발생하는 곳)입니다.

QT_PATH에는이 포함되어있어 제 크로스 컴파일러를 찾을 수 있습니다. 당신은 Qt는이 버전에 내장 된 응용 프로그램을 연결하는 데 문제가있는 것처럼,하지 Qt는 자체가, 올바른 구축 보인다, 또한

include(../common/linux_device_pre.conf) 

COMPILER_FLAGS   = -mtune=core-avx-i 

#modifications to gcc-base.conf 
QMAKE_CFLAGS  += $$COMPILER_FLAGS 
QMAKE_CXXFLAGS  += $$COMPILER_FLAGS 

#QMAKE_LFLAGS  = 

QMAKE_INCDIR   = $${TOOL_DIR}/include $$[QT_SYSROOT]/usr/include 

QMAKE_CXXFLAGS_CXX11 = -std=c++11 

# Sanity check 
deviceSanityCheckCompiler() 

load(qt_config) 

: 여기

내 qmake.conf입니까?이 경우, 아직 도구가 아닌 경우, 툴체인을 위해 빌드 한 qmake를 호출해야합니다 (호스트 실행 파일이어야 함). cmake를 사용한다면 Qt를 찾을 때이 qmake가 먼저 경로에 있어야합니다.