我需要交叉编译一个Qt app for arm。这就是我的工作:
export SDK_MXC_PATH="/path/to/sdk"
export QMAKESPEC="${SDK_MXC_PATH}/usr/mkspecs/devices/linux-imx6-g++/"
export SDK_MXC_BIN="${SDK_MXC_PATH}/toolchain/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/"
export QMAKE="${SDK_MXC_BIN}/qmake"
export PATH="${SDK_MXC_BIN}:${PATH}"
${QMAKE} -spec ${QMAKESPEC}
make
mkspec文件似乎没问题:
include(../common/linux_device_pre.conf)
EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_imx6.cpp
QMAKE_INCDIR += $(SDK_MXC_PATH)/usr/include
QMAKE_LIBDIR += $(SDK_MXC_PATH)/usr/lib
QMAKE_LIBS_EGL += -lEGL -L$(SDK_MXC_PATH)/usr/lib
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL -lGAL -L$(SDK_MXC_PATH)/usr/lib
QMAKE_LIBS_OPENVG += -lOpenVG -lEGL -lGAL -L$(SDK_MXC_PATH)/usr/lib
QMAKE_LIBDIR_OPENGL_ES2 = $(SDK_MXC_PATH)/usr/lib
QMAKE_LFLAGS += -Wl,-rpath-link=$(SDK_MXC_PATH)/usr/lib
QMAKE_CFLAGS_RELEASE += -DLINUX=1 -DEGL_API_FB=1 -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize -fomit-frame-pointer
QMAKE_CXXFLAGS_RELEASE += -DLINUX=1 -DEGL_API_FB=1 -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize -fomit-frame-pointer
include(../common/linux_device_post.conf)
load(qt_config)
链接失败,出现此错误:
arm-none-linux-gnueabi-g++ -c -pipe -O2 -DLINUX=1 -DEGL_API_FB=1 -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfloat-abi=softfp -mfpu=neon -ftree-vectorize -fomit-frame-pointer -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../path/to/sdk/usr/mkspecs/devices/linux-imx6-g++ -I. -I../../path/to/sdk/usr/include -I../../path/to/sdk/usr/include/QtWidgets -I../../path/to/sdk/usr/include/QtGui -I../../path/to/sdk/usr/include/QtCore -I. -I/path/to/sdk/usr/include -o main.o main.cpp
arm-none-linux-gnueabi-g++ -Wl,-rpath-link=/path/to/sdk/usr/lib -Wl,-O1 -Wl,-rpath,/usr/lib -o qt-hello main.o -L/path/to/sdk/usr/lib -L/path/to/sdk/usr/lib -lQt5Widgets -L/usr/lib -lQt5Gui -lQt5Core -lGLESv2 -lEGL -lGAL -lpthread
/usr/lib/libc_nonshared.a: could not read symbols: File format not recognized
collect2: ld returned 1 exit status
Makefile:183: recipe for target 'qt-hello' failed
make: *** [qt-hello] Error 1
我猜是因为它试图在/ usr / lib
中搜索库如果我手动调用链接器,删除-L/usr/lib
它可以正常工作,并且可执行文件可以在我的目标上运行。以下命令有效,请注意我已删除-L/usr/lib
arm-none-linux-gnueabi-g++ -Wl,-rpath-link=/path/to/sdk/usr/lib -Wl,-O1 -Wl,-rpath,/usr/lib -o qt-hello main.o -L/path/to/sdk/usr/lib -L/path/to/sdk/usr/lib -lQt5Widgets -lQt5Gui -lQt5Core -lGLESv2 -lEGL -lGAL -lpthread
我能做些什么让qmake
按预期工作?每次qmake生成时,我都不想手动链接或编辑Makefile。
答案 0 :(得分:-1)
在编译Qt本身时遇到同样的问题 - 似乎会影响任何调用mesa的东西。但是mesa的.pc文件还可以。
OTOH,Qt会创建损坏的.pc文件。看看他们怪异的makefile生成器代码,似乎他们已经明白pkg-config处理它自己的依赖--IOW:错过了重点。 (好吧,他们 仍然不明白制作。)
然而,旧的故事 - 仍然完全不适合嵌入式系统。