Qt qmake在交叉编译时添加/usr/lib绝对路径

Qt qmake在交叉编译时添加/usr/lib绝对路径,qt,cross-compiling,qmake,Qt,Cross Compiling,Qmake,我需要为arm交叉编译一个Qt应用程序。我就是这么做的: 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/

我需要为arm交叉编译一个Qt应用程序。我就是这么做的:

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时都手动链接或编辑它。

编译Qt本身也有同样的问题-似乎会影响调用mesa的任何东西。但是mesa的.pc文件没问题

OTOH,Qt创建了损坏的.pc文件。看看他们庞大的makefile生成器代码,似乎他们曾经理解过pkg-config处理依赖于它自己的依赖关系-IOW:没有抓住要点。(嗯,他们 我还是不明白


然而,老故事——仍然不适合嵌入式系统。

您是否尝试打印
QMAKE_LIBDIR
以检查它是否包含
/usr/lib
,或者从该变量中减去它?