[oe] qmake issue

Frans Meulenbroeks fransmeulenbroeks at gmail.com
Sun Jan 3 16:33:51 UTC 2010


Hi,

I noticed the following issue when building mythtv.
Mythtv uses qmake. Several of the .pro files contain additional
libraries with -L

However if e.g. I look at the generated Makefile for mythfrontend I see:

LIBS          = $(SUBLIBS)  -L$(OE_QMAKE_LIBDIR_QT)
-Wl,-rpath-link,/home/frans/oe/tmp_angstrom/work/armv7a-angstrom-linux-gnueabi/qt4-x11-free-4.6.0-r13.1/qt-everywhere-opensource-src-4.6.0/lib
-L../../libs/libmyth -L../../libs/libmythtv -L../../libs/libavutil
-L../../libs/libavcodec -L../../libs/libavformat
-L../../libs/libswscale -L../../libs/libmythdb -L../../libs/libmythui
-L../../libs/libmythupnp -lmythtv-0.22 -lmythavformat-0.22
-lmythavutil-0.22 -lmythavcodec-0.22 -lmythswscale-0.22
-lmythupnp-0.22 -lmyth-0.22 -lmythui-0.22 -lmythdb-0.22
-L../../libs/libmythlivemedia -lmythlivemedia-0.22
-L../../libs/libmythfreemheg -lmythfreemheg-0.22
-L../../libs/libmythhdhomerun -lmythhdhomerun-0.22
-L/home/frans/oe/tmp_angstrom/staging/armv7a-angstrom-linux-gnueabi/usr/lib
-lfreetype -lXinerama -lX11 -lXext -lXxf86vm -lXv -lXrandr -lQtWebKit
-Wl,-rpath-link,/usr/lib -lphonon -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -lQtDBus -Wl,-rpath-link,/usr/lib -lQtSql
-Wl,-rpath-link,/usr/lib -lQtXml -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -lQtGui -Wl,-rpath-link,/usr/lib -lQtNetwork
-Wl,-rpath-link,/usr/lib -lQtCore -Wl,-rpath-link,/usr/lib -lglib-2.0
-lpthread

and eventually the executed link command is:

ccache arm-angstrom-linux-gnueabi-g++
-L/home/frans/oe/tmp_angstrom/staging/armv7a-angstrom-linux-gnueabi/usr/lib
-Wl,-rpath-link,/home/frans/oe/tmp_angstrom/staging/armv7a-angstrom-linux-gnueabi/usr/lib
-Wl,-O1 -Wl,--hash-style=gnu -o mythfrontend version.o main.o
playbackbox.o viewscheduled.o globalsettings.o manualschedule.o
programrecpriority.o channelrecpriority.o statusbox.o networkcontrol.o
mediarenderer.o mythfexml.o playbackboxlistitem.o custompriority.o
mythappearance.o exitprompt.o proglist.o action.o actionset.o
mythcontrols.o keybindings.o keygrabber.o mythosdmenueditor.o
progfind.o guidegrid.o customedit.o schedulecommon.o progdetails.o
scheduleeditor.o moc_main.o moc_playbackbox.o moc_viewscheduled.o
moc_globalsettings.o moc_manualschedule.o moc_programrecpriority.o
moc_channelrecpriority.o moc_statusbox.o moc_networkcontrol.o
moc_custompriority.o moc_mythappearance.o moc_exitprompt.o
moc_proglist.o moc_mythcontrols.o moc_keygrabber.o
moc_mythosdmenueditor.o moc_progfind.o moc_guidegrid.o
moc_customedit.o moc_progdetails.o moc_scheduleeditor.o
-L/home/frans/oe/tmp_angstrom/staging/armv7a-angstrom-linux-gnueabi/usr/lib
-Wl,-rpath-link,/home/frans/oe/tmp_angstrom/work/armv7a-angstrom-linux-gnueabi/qt4-x11-free-4.6.0-r13.1/qt-everywhere-opensource-src-4.6.0/lib
-L../../libs/libmyth -L../../libs/libmythtv -L../../libs/libavutil
-L../../libs/libavcodec -L../../libs/libavformat
-L../../libs/libswscale -L../../libs/libmythdb -L../../libs/libmythui
-L../../libs/libmythupnp -lmythtv-0.22 -lmythavformat-0.22
-lmythavutil-0.22 -lmythavcodec-0.22 -lmythswscale-0.22
-lmythupnp-0.22 -lmyth-0.22 -lmythui-0.22 -lmythdb-0.22
-L../../libs/libmythlivemedia -lmythlivemedia-0.22
-L../../libs/libmythfreemheg -lmythfreemheg-0.22
-L../../libs/libmythhdhomerun -lmythhdhomerun-0.22
-L/home/frans/oe/tmp_angstrom/staging/armv7a-angstrom-linux-gnueabi/usr/lib
-lfreetype -lXinerama -lX11 -lXext -lXxf86vm -lXv -lXrandr -lQtWebKit
-Wl,-rpath-link,/usr/lib -lphonon -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib -lQtDBus
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -lQtSql -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib -lQtXml
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -lQtGui -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib -lQtNetwork
-Wl,-rpath-link,/usr/lib -Wl,-rpath-link,/usr/lib
-Wl,-rpath-link,/usr/lib -lQtCore -Wl,-rpath-link,/usr/lib -lglib-2.0
-lpthread

In this I see two issues.

The obvious one is of course the explosion of  -Wl,-rpath-link,/usr/lib
Somewhat annoying but not really harmful.

What is more harmful though is that somewhere in the build process the
linking is done by invoking: arm-angstrom-linux-gnueabi-g++
-L/home/frans/oe/tmp_angstrom/staging/armv7a-angstrom-linux-gnueabi/usr/lib
...
-L dirs are searched for in the order they appear on the command line,
so the version in staging has preference above the local version
(which is only moved to staging after the compilation is completed).

I can imagine a few solutions, but no idea which one is the best and
how to implement them.
First option is to hack the generated makefile in a configure_append
step. While this would solve the issue for me it is not really a
generic solution.
Second option is to force removing a package from staging when a new
version is build
Third option is to change the class which generates the above command
to put the -L near the end (after any -L's from the makefile itself.

No idea on the way to solve this. Anyone an idea (and perhaps the
knowledge to fix this)?

Frans.




More information about the Openembedded-devel mailing list