imsory / gnome2-globalmenu

Automatically exported from code.google.com/p/gnome2-globalmenu
GNU General Public License v2.0
0 stars 0 forks source link

underlinking issues #361

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?

1. try to compile with these LDFLAGS set: LDFLAGS=' -Wl,--as-needed
-Wl,--no-undefined' as these are used in many newer distributions
2. observe the error messages from the linker down below

What is the expected output? What do you see instead?
 no error message/linking problem ;)

What version of the product are you using? On what operating system?
gnome2-globalmenu-0.7.3 and trunk, vala-0.5.6
with Mandrivalinux 2009.0

Please provide any additional information below:

detailed error message:

/bin/sh ../libtool --tag=CC   --mode=link i586-mandriva-linux-gnu-gcc  -O2
-g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -version-info 2:0:0 -release 0.7.3
-Wl,--as-needed -Wl,--no-undefined -o libgnomenu.la -rpath /usr/lib
libgnomenu_la-helper.lo libgnomenu_la-parser.lo libgnomenu_la-serializer.lo
libgnomenu_la-menu.lo libgnomenu_la-menubar.lo libgnomenu_la-menuitem.lo
libgnomenu_la-window.lo libgnomenu_la-menubarbox.lo
libgnomenu_la-menushellutils.lo libgnomenu_la-label.lo
libgnomenu_la-keygrab.lo libgnomenu_la-globalmenu.lo
libgnomenu_la-gnomenu.lo libgnomenu_la-monitor.lo  
libgnomenu_la-keygrab-ccode.lo libgnomenu_la-gmarkup-backport.lo
libgnomenu_la-menushellutils-ccode.lo -lwnck-1 -lgtk-x11-2.0 -lgdk-x11-2.0
-latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0
-lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0 -lgmodule-2.0
-lglib-2.0                      
i586-mandriva-linux-gnu-gcc -shared -Wl,--as-needed 
.libs/libgnomenu_la-helper.o .libs/libgnomenu_la-parser.o
.libs/libgnomenu_la-serializer.o .libs/libgnomenu_la-menu.o
.libs/libgnomenu_la-menubar.o .libs/libgnomenu_la-menuitem.o
.libs/libgnomenu_la-window.o .libs/libgnomenu_la-menubarbox.o
.libs/libgnomenu_la-menushellutils.o .libs/libgnomenu_la-label.o
.libs/libgnomenu_la-keygrab.o .libs/libgnomenu_la-globalmenu.o
.libs/libgnomenu_la-gnomenu.o .libs/libgnomenu_la-monitor.o
.libs/libgnomenu_la-keygrab-ccode.o .libs/libgnomenu_la-gmarkup-backport.o
.libs/libgnomenu_la-menushellutils-ccode.o  /usr/lib/libwnck-1.so
-L/usr/lib /usr/lib/libgtk-x11-2.0.so /usr/lib/libgdk-x11-2.0.so
/usr/lib/libatk-1.0.so /usr/lib/libgio-2.0.so /usr/lib/libpangoft2-1.0.so
/usr/lib/libgdk_pixbuf-2.0.so /usr/lib/libpangocairo-1.0.so
/usr/lib/libcairo.so /usr/lib/libpango-1.0.so /usr/lib/libfreetype.so -lz
/usr/lib/libfontconfig.so /usr/lib/libgobject-2.0.so
/usr/lib/libgmodule-2.0.so /usr/lib/libglib-2.0.so  -march=i586
-mtune=generic -Wl,--as-needed -Wl,--no-undefined -Wl,-soname
-Wl,libgnomenu-0.7.3.so.2 -o .libs/libgnomenu-0.7.3.so.2.0.0              

.libs/libgnomenu_la-keygrab-ccode.o: In function `maybe_grab_key':        

/home/shadow/rpm/BUILD/gnome-globalmenu-0.7.3/libgnomenu/keygrab-ccode.c:46: 
undefined
reference to `XGrabKey'                                                   

/home/shadow/rpm/BUILD/gnome-globalmenu-0.7.3/libgnomenu/keygrab-ccode.c:53: 
undefined
reference to `XUngrabKey'                                                 

collect2: ld returned 1 exit status                                       

make[4]: *** [libgnomenu.la] Error 1                                      

make[4]: Leaving directory
`/home/shadow/rpm/BUILD/gnome-globalmenu-0.7.3/libgnomenu'        
make[3]: *** [all-recursive] Error 1                                      

make[3]: Leaving directory
`/home/shadow/rpm/BUILD/gnome-globalmenu-0.7.3/libgnomenu'        
make[2]: *** [all] Error 2                                                

make[2]: Leaving directory
`/home/shadow/rpm/BUILD/gnome-globalmenu-0.7.3/libgnomenu'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/shadow/rpm/BUILD/gnome-globalmenu-0.7.3'
make: *** [all] Error 2

This will show you what provides these "undefined references/symbols":

$ for f in /usr/lib/*.so.*; do objdump -t -T $f | grep XGrabKey | grep -v
'*UND*' && echo $f; done
00024834 g    DF .text  0000011f  Base        XGrabKeyboard
00024954 g    DF .text  000000f4  Base        XGrabKey
/usr/lib/libX11.so.6
00024834 g    DF .text  0000011f  Base        XGrabKeyboard
00024954 g    DF .text  000000f4  Base        XGrabKey
/usr/lib/libX11.so.6.2.0

$ for f in /usr/lib/*.so.*; do objdump -t -T $f | grep XUngrabKey | grep -v
'*UND*' && echo $f; done
00041ac8 g    DF .text  000000d3  Base        XUngrabKeyboard
00041b9c g    DF .text  000000e2  Base        XUngrabKey
/usr/lib/libX11.so.6
00041ac8 g    DF .text  000000d3  Base        XUngrabKeyboard
00041b9c g    DF .text  000000e2  Base        XUngrabKey
/usr/lib/libX11.so.6.2.0

$ rpm -qf /usr/lib/libX11.so.6.2.0
libx11_6-1.1.5-1mdv2009.0

It seems libgnomenu (or more specificallykeygrab-ccode.o) should also be
linked against libX11.

Original issue reported on code.google.com by doktor5...@arcor.de on 1 Mar 2009 at 4:03

GoogleCodeExporter commented 8 years ago
Please also have a look at:
http://wiki.mandriva.com/en/Underlinking and
http://wiki.mandriva.com/en/Overlinking
to understand the problem more thoroughly.

Original comment by doktor5...@arcor.de on 1 Mar 2009 at 4:04

GoogleCodeExporter commented 8 years ago

Original comment by rainwood...@gmail.com on 2 Mar 2009 at 6:17

GoogleCodeExporter commented 8 years ago
Please test if the trunk@2383 already fixes the issue.

Original comment by rainwood...@gmail.com on 2 Mar 2009 at 6:43

GoogleCodeExporter commented 8 years ago
Will check.

Further investigation shows that 0.7.2 builds without that problem, it only has 
an
overlinked library, as you can see here:

Warning: unused libraries in /usr/lib/GlobalMenu.PanelApplet: libpthread.so.0

which may come from the wrong linking order as shown here:
http://wiki.mandriva.com/en/Overlinking#Wrong_linking_order

0.7.3 has the described underlinking problem, and for testing trunk i'll need to
update vala. Is a trunk build of vala required or is vala-0.5.7 recent enough?

Original comment by doktor5...@arcor.de on 3 Mar 2009 at 5:51

GoogleCodeExporter commented 8 years ago
trunk rev. 2383 does not build, it seems it does not find some include files,
i have seen this before when building from trunk. All relevant -devel packages 
are
installed, this is the same environment where 0.7.2 builds just fine.

This is the last part of the build output where the errors occur:

make[3]: Entering directory `/home/shadow/rpm/BUILD/gnome-globalmenu/applet'    

i586-mandriva-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I..  -I/usr/include/libwnck-1.0
-I/usr/include/pango-1.0 -I/usr/include/cairo 
-I/usr/include/startup-notification-1.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0
-I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12
-I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0   /usr/include/panel-2.0/ -I..
-include ../config.h -DGMENU_I_KNOW_THIS_IS_UNSTABLE 
-DWNCK_I_KNOW_THIS_IS_UNSTABLE
-g    -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -fomit-frame-pointer -march=i586 -mtune=generic
-fasynchronous-unwind-tables -MT GlobalMenu_PanelApplet-applet.o -MD -MP -MF
.deps/GlobalMenu_PanelApplet-applet.Tpo -c -o GlobalMenu_PanelApplet-applet.o 
`test
-f 'applet.c' || echo './'`applet.c             
In file included from applet.c:2:                                               

applet.h:7:26: error: panel-applet.h: No such file or directory                 

In file included from applet.c:2:                                               

applet.h:25: error: expected specifier-qualifier-list before 'PanelApplet'      

applet.h:30: error: expected specifier-qualifier-list before 'PanelAppletClass' 

applet.c:10:25: error: libbonoboui.h: No such file or directory                 

applet.c:18:32: error: gconf/gconf-client.h: No such file or directory          

applet.c:43: error: expected ')' before '*' token                               

applet.c:44: error: expected ')' before '*' token                               

applet.c:45: error: expected ')' before '*' token                               

applet.c:50: error: expected ')' before '*' token                               

applet.c:51: error: expected ')' before '*' token                               

applet.c:52: error: expected ')' before '*' token                               

applet.c:53: error: expected ')' before '*' token                               

applet.c:57: error: expected ')' before '*' token                               

applet.c:58: error: expected ')' before '*' token                               

applet.c:59: error: expected ')' before '*' token                               

applet.c:72: error: expected '=', ',', ';', 'asm' or '__attribute__' before
'APPLET_verbs'   
applet.c:81: error: expected ')' before '*' token                               

applet.c:86: error: expected ')' before '*' token                               

applet.c:91: error: expected ')' before '*' token                               

applet.c: In function 'applet_real_dispose':                                    

applet.c:112: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:113: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:114: error: 'PanelApplet' undeclared (first use in this function)      

applet.c:114: error: (Each undeclared identifier is reported only once          

applet.c:114: error: for each function it appears in.)                          

applet.c:114: error: expected expression before ')' token                       

applet.c: In function 'applet_real_screen_changed':                             

applet.c:145: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: In function 'applet_on_window_changed':                               

applet.c:162: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:164: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: At top level:                                                         

applet.c:169: error: expected ')' before '*' token                              

applet.c:201: error: expected ')' before '*' token                              

applet.c:233: error: expected ')' before '*' token                              

applet.c:240: error: expected ')' before '*' token                              

applet.c: In function 'applet_init':                                            

applet.c:247: error: 'GConfClient' undeclared (first use in this function)      

applet.c:247: error: '_tmp0' undeclared (first use in this function)            

applet.c:248: error: 'client' undeclared (first use in this function)           

applet.c:262: error: 'PanelApplet' undeclared (first use in this function)      

applet.c:262: error: expected expression before ')' token                       

applet.c:288: error: '___lambda4_gconf_client_value_changed' undeclared (first 
use in
this function)                                                                  

applet.c:298: error: expected expression before ')' token                       

applet.c: In function 'applet_check_module':                                    

applet.c:335: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:346: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:346: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:346: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:346: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:349: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: In function 'applet_get_prefs':                                       

applet.c:395: error: 'PanelApplet' undeclared (first use in this function)      

applet.c:395: error: expected expression before ')' token                       

applet.c:401: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:402: error: expected expression before ')' token                       

applet.c:408: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:409: error: expected expression before ')' token                       

applet.c:415: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:416: error: expected expression before ')' token                       

applet.c:422: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:423: error: expected expression before ')' token                       

applet.c:429: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: At top level:                                                         

applet.c:433: error: expected ')' before '*' token                              

applet.c:464: error: expected ')' before '*' token                              

applet.c:482: error: expected ')' before '*' token                              

applet.c: In function 'applet_real_button_press_event':                         

applet.c:513: error: 'PanelApplet' undeclared (first use in this function)      

applet.c:513: error: expected expression before ')' token                       

applet.c: In function 'applet_constructor':                                     

applet.c:563: error: 'PanelAppletBackgroundType' undeclared (first use in this
function)     
applet.c:563: error: expected ';' before 'bgtype'                               

applet.c:565: error: expected ';' before '_tmp1'                                

applet.c:568: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:570: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:571: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:572: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:573: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:573: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:574: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:575: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:577: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:578: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:578: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:579: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:579: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:582: error: 'PanelApplet' undeclared (first use in this function)      

applet.c:582: error: expected expression before ')' token                       

applet.c:583: error: expected expression before ')' token                       

applet.c:585: error: 'bgtype' undeclared (first use in this function)           

applet.c:588: error: '_tmp1' undeclared (first use in this function)            

applet.c:588: error: expected expression before ')' token                       

applet.c:590: error: expected expression before ')' token                       

applet.c:591: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:592: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: In function 'applet_class_init':                                      

applet.c:606: error: invalid type argument of '->' (have 'int')                 

applet.c:606: error: 'applet_real_change_background' undeclared (first use in 
this
function) 
applet.c:607: error: invalid type argument of '->' (have 'int')                 

applet.c:607: error: 'applet_real_change_orient' undeclared (first use in this
function)     
applet.c:609: warning: assignment from incompatible pointer type                

applet.c: In function 'applet_instance_init':                                   

applet.c:614: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:615: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:616: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:617: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:618: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: In function 'applet_finalize':                                        

applet.c:627: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:627: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:627: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:628: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:628: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:628: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:629: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:629: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:629: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:630: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:630: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:630: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:631: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:631: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c:631: error: 'GlobalMenuPanelApplet' has no member named 'priv'         

applet.c: In function 'applet_get_type':                                        

applet.c:640: error: 'PANEL_TYPE_APPLET' undeclared (first use in this 
function)    

make[3]: *** [GlobalMenu_PanelApplet-applet.o] Error 1                          

make[3]: Leaving directory `/home/shadow/rpm/BUILD/gnome-globalmenu/applet'     

make[2]: *** [all] Error 2                                                      

make[2]: Leaving directory `/home/shadow/rpm/BUILD/gnome-globalmenu/applet'     

make[1]: *** [all-recursive] Error 1                                            

make[1]: Leaving directory `/home/shadow/rpm/BUILD/gnome-globalmenu'
make: *** [all] Error 2

Original comment by doktor5...@arcor.de on 3 Mar 2009 at 7:42

GoogleCodeExporter commented 8 years ago
After trying a bit here and there it seems it builds now.
I just removed --prefix=/usr from the configure call.

The only thing you should consider is to place a hint anywhere that vala 
doesn't like
to run through make set to do multi-jobs, make should always be called like 
make -j1
otherwise this could lead to problems.

I'll try to figure out that overlinking issue with libpthread.so.0, then i'll 
report
back.

Original comment by doktor5...@arcor.de on 3 Mar 2009 at 8:10

GoogleCodeExporter commented 8 years ago
@comment 5:
Notice the directive with 
   /usr/include/panel-2.0/

-I is missing.
definitely something is wrong with your pkg-config.

Original comment by rainwood...@gmail.com on 7 Mar 2009 at 5:31

GoogleCodeExporter commented 8 years ago
Issue 303 has been merged into this issue.

Original comment by rainwood...@gmail.com on 7 Mar 2009 at 5:33

GoogleCodeExporter commented 8 years ago
Yes lets slip the pthread issue to the next release. 

Original comment by rainwood...@gmail.com on 7 Mar 2009 at 7:08

GoogleCodeExporter commented 8 years ago
@doktor5,

Did you any hints on the libpthread.so?

Original comment by rainwood...@gmail.com on 8 Apr 2009 at 3:12

GoogleCodeExporter commented 8 years ago
Slip.

Original comment by rainwood...@gmail.com on 19 Apr 2009 at 7:58