All,
How do I add a library to a build in TDE? For some reason, the tdegraphics cmake setup does not include libXext. I have patched Makefile.am with -lXext and it is not seen by cmake or used for the build?? (Eg. I patched ksnapshot Makefile.am as follows):
ksnapshot_LDADD = $(LIB_TDEPRINT) -lXext
However, the ksnapshot link still fails:
/usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status
I have looked at ConfigureChecks.cmake and all it includes is:
check_include_file( X11/extensions/shape.h HAVE_X11_EXTENSIONS_SHAPE_H )
Can I tell cmake to include the library here? Or should the library inclusion go elsewhere? If so where?
Is there a link to the cmake functions available in a TDE build? That would be very helpful to help packages not familiar with cmake held debug, etc..
I have found tde_add_library, but I don't know if that can be used to add an existing system library or if that is just to tell cmake to build and link the library?? Also, there are several forms:
tde_add_library( kfaximage STATIC_PIC AUTOMOC tde_add_library( kfaximage SHARED AUTOMOC tde_add_library( ksvg SHARED
If I can add libXext with tde_add_library would it be SHARED, STATIC_PIC and with or without AUTOMOC?
I'm also not convinced that the problem isn't with cmake not concatenating or forming the link string properly after the problem encountered with libkscan. Below in the full error, there are man files just listed without any -l or -L preceding them. Is this correct? The full error I get with the tdegraphics/ksnapshot build is:
[ 66%] Building CXX object ksnapshot/CMakeFiles/ksnapshot.dir/ksnapshotwidget.cpp.o cd /build/src/build/ksnapshot && /usr/bin/c++ -DHAVE_CONFIG_H -DKSNAPVERSION="0.7" -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DQT_NO_ASCII_CAST -DQT_CLEAN_NAMESPACE -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_THREAD_SUPPORT -D_REENTRANT -include tqt.h -I/build/src/build/ksnapshot -I/build/src/tdegraphics/ksnapshot -I/build/src/build -I/opt/trinity/include -I/opt/tqt3/include -I/opt/trinity/include/tqt -o CMakeFiles/ksnapshot.dir/ksnapshotwidget.cpp.o -c /build/src/build/ksnapshot/ksnapshotwidget.cpp Linking CXX executable ksnapshot cd /build/src/build/ksnapshot && /usr/bin/cmake -E cmake_link_script CMakeFiles/ksnapshot.dir/link.txt --verbose=1 /usr/bin/c++ -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DQT_NO_ASCII_CAST -DQT_CLEAN_NAMESPACE -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_THREAD_SUPPORT -D_REENTRANT -include tqt.h -Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu CMakeFiles/ksnapshot.dir/ksnapshotiface_skel.cpp.o CMakeFiles/ksnapshot.dir/main.cpp.o CMakeFiles/ksnapshot.dir/ksnapshot.cpp.o CMakeFiles/ksnapshot.dir/regiongrabber.cpp.o CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o CMakeFiles/ksnapshot.dir/ksnapshotwidget.cpp.o -o ksnapshot -rdynamic -L/opt/trinity/lib -L/opt/tqt3/lib /opt/trinity/lib/libtdeprint.so.4.2.0 /opt/trinity/lib/libkio.so.4.2.0 /opt/trinity/lib/libtdeui.so.4.2.0 -lfreetype -lfontconfig /opt/trinity/lib/libtdesu.so.4.2.0 -lutil /opt/trinity/lib/libkwalletclient.so.1.0.1 /opt/trinity/lib/libtdecore.so.4.2.0 /opt/trinity/lib/libDCOP.so.4.2.0 /opt/trinity/lib/libtdefx.so.4.2.0 -ltqt -ltqt-mt -lXrender -lX11 -lz -lidn -lXcomposite -lICE -lSM -Wl,-rpath,/opt/trinity/lib:/opt/tqt3/lib: /usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status make[2]: *** [ksnapshot/ksnapshot] Error 1 make[2]: Leaving directory `/build/src/build' make[1]: *** [ksnapshot/CMakeFiles/ksnapshot.dir/all] Error 2 make[1]: Leaving directory `/build/src/build' make: *** [all] Error 2
Thanks for any help you can offer.
To whatever binary you need to add it to, add that flag, without the l to the LINK line
Sorry on my mobile On Mar 8, 2012 7:10 PM, "David C. Rankin" drankinatty@suddenlinkmail.com wrote:
All,
How do I add a library to a build in TDE? For some reason, the tdegraphics cmake setup does not include libXext. I have patched Makefile.am with -lXext and it is not seen by cmake or used for the build?? (Eg. I patched ksnapshot Makefile.am as follows):
ksnapshot_LDADD = $(LIB_TDEPRINT) -lXext
However, the ksnapshot link still fails:
/usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status
I have looked at ConfigureChecks.cmake and all it includes is:
check_include_file( X11/extensions/shape.h HAVE_X11_EXTENSIONS_SHAPE_H )
Can I tell cmake to include the library here? Or should the library inclusion go elsewhere? If so where?
Is there a link to the cmake functions available in a TDE build? That would be very helpful to help packages not familiar with cmake held debug, etc..
I have found tde_add_library, but I don't know if that can be used to add an existing system library or if that is just to tell cmake to build and link the library?? Also, there are several forms:
tde_add_library( kfaximage STATIC_PIC AUTOMOC tde_add_library( kfaximage SHARED AUTOMOC tde_add_library( ksvg SHARED
If I can add libXext with tde_add_library would it be SHARED, STATIC_PIC and with or without AUTOMOC?
I'm also not convinced that the problem isn't with cmake not concatenating or forming the link string properly after the problem encountered with libkscan. Below in the full error, there are man files just listed without any -l or -L preceding them. Is this correct? The full error I get with the tdegraphics/ksnapshot build is:
[ 66%] Building CXX object ksnapshot/CMakeFiles/ksnapshot.dir/ksnapshotwidget.cpp.o cd /build/src/build/ksnapshot && /usr/bin/c++ -DHAVE_CONFIG_H -DKSNAPVERSION="0.7" -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DQT_NO_ASCII_CAST -DQT_CLEAN_NAMESPACE -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_THREAD_SUPPORT -D_REENTRANT -include tqt.h -I/build/src/build/ksnapshot -I/build/src/tdegraphics/ksnapshot -I/build/src/build -I/opt/trinity/include -I/opt/tqt3/include -I/opt/trinity/include/tqt -o CMakeFiles/ksnapshot.dir/ksnapshotwidget.cpp.o -c /build/src/build/ksnapshot/ksnapshotwidget.cpp Linking CXX executable ksnapshot cd /build/src/build/ksnapshot && /usr/bin/cmake -E cmake_link_script CMakeFiles/ksnapshot.dir/link.txt --verbose=1 /usr/bin/c++ -march=i686 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -DQT_NO_ASCII_CAST -DQT_CLEAN_NAMESPACE -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION -DQT_THREAD_SUPPORT -D_REENTRANT -include tqt.h -Wl,-O1,--sort-common,--as-needed,-z,relro,--hash-style=gnu CMakeFiles/ksnapshot.dir/ksnapshotiface_skel.cpp.o CMakeFiles/ksnapshot.dir/main.cpp.o CMakeFiles/ksnapshot.dir/ksnapshot.cpp.o CMakeFiles/ksnapshot.dir/regiongrabber.cpp.o CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o CMakeFiles/ksnapshot.dir/ksnapshotwidget.cpp.o -o ksnapshot -rdynamic -L/opt/trinity/lib -L/opt/tqt3/lib /opt/trinity/lib/libtdeprint.so.4.2.0 /opt/trinity/lib/libkio.so.4.2.0 /opt/trinity/lib/libtdeui.so.4.2.0 -lfreetype -lfontconfig /opt/trinity/lib/libtdesu.so.4.2.0 -lutil /opt/trinity/lib/libkwalletclient.so.1.0.1 /opt/trinity/lib/libtdecore.so.4.2.0 /opt/trinity/lib/libDCOP.so.4.2.0 /opt/trinity/lib/libtdefx.so.4.2.0 -ltqt -ltqt-mt -lXrender -lX11 -lz -lidn -lXcomposite -lICE -lSM -Wl,-rpath,/opt/trinity/lib:/opt/tqt3/lib: /usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status make[2]: *** [ksnapshot/ksnapshot] Error 1 make[2]: Leaving directory `/build/src/build' make[1]: *** [ksnapshot/CMakeFiles/ksnapshot.dir/all] Error 2 make[1]: Leaving directory `/build/src/build' make: *** [all] Error 2
Thanks for any help you can offer.
-- David C. Rankin, J.D.,P.E.
To unsubscribe, e-mail: trinity-devel-unsubscribe@lists.pearsoncomputing.net For additional commands, e-mail: trinity-devel-help@lists.pearsoncomputing.net Read list messages on the web archive: http://trinity-devel.pearsoncomputing.net/ Please remember not to top-post: http://trinity.pearsoncomputing.net/mailing_lists/#top-posting
On 03/08/2012 06:26 PM, Calvin Morrison wrote:
To whatever binary you need to add it to, add that flag, without the l to the LINK line
Sorry on my mobile
Mobile is fine,
I have found in TDEMacros.cmake tde_add_library:
# found directive "LINK" if( "${_arg}" STREQUAL "LINK" ) set( _skip_store 1 ) set( _storage "_link" ) endif( "${_arg}" STREQUAL "LINK" )
So it looks like it need
tde_add_library( Xext LINK )
On Friday 09 March 2012 02:09:57 David C. Rankin wrote:
All,
How do I add a library to a build in TDE? For some reason, the tdegraphics cmake setup does not include libXext. I have patched Makefile.am with -lXext and it is not seen by cmake or used for the build?? (Eg. I patched ksnapshot Makefile.am as follows):
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared Xext DESTINATION ${BIN_INSTALL_DIR} )
But this is dirty hack, because the build will fail if devel package of Xext is not installed.
PS tde_add_library meaming that you add a target to Makefile, not to add a library to a target.
On 03/08/2012 06:32 PM, Serghei Amelian wrote:
On Friday 09 March 2012 02:09:57 David C. Rankin wrote:
All,
How do I add a library to a build in TDE? For some reason, the tdegraphics cmake setup does not include libXext. I have patched Makefile.am with -lXext and it is not seen by cmake or used for the build?? (Eg. I patched ksnapshot Makefile.am as follows):
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared Xext DESTINATION ${BIN_INSTALL_DIR} )
But this is dirty hack, because the build will fail if devel package of Xext is not installed.
PS tde_add_library meaming that you add a target to Makefile, not to add a library to a target.
Thanks you Serghei,
That is what I needed to know. See -- you can teach an old dog cmake -- it just takes longer :)
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp
ksnapshot.cpp regiongrabber.cpp
windowgrabber.cpp
ksnapshotwidget.ui
LINK kdeprint-shared Xext DESTINATION ${BIN_INSTALL_DIR} )
But this is dirty hack, because the build will fail if
devel package of Xext is not installed.
Would a more proper solution be to test the value of the internal cmake variable HAVE_X11_EXTENSIONS_SHAPE_H and when true add the link? Something like this:
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui if( HAVE_X11_EXTENSIONS_SHAPE_H ) LINK tdeprint-shared Xext else LINK tdeprint-shared endif( ) DESTINATION ${BIN_INSTALL_DIR} )
PS tde_add_library meaming that you add a target to
Makefile, not to add a library to a target.
That is what I needed to know. See -- you can teach an old dog cmake -- it just takes longer :)
Is ksnapshot supposed to link against Xext? I don't think so. When I look at my last tdegraphics build log, I see "-lXext" for kuickshow but no other tdegraphics components. The kuickshow CMakeLists.txt does not have a LINK directive for Xext but does have a LINK directive for IMLIB_LIBRARIES, through which kuickshow links to Xext. Looking at the older automake files does not show any ksnapshot linking to Xext or IMLIB_LIBRARIES.
Darrell
On Friday 09 March 2012 03:34:36 Darrell Anderson wrote: [...]
But this is dirty hack, because the build will fail if
devel package of Xext is not installed.
Would a more proper solution be to test the value of the internal cmake variable HAVE_X11_EXTENSIONS_SHAPE_H and when true add the link? Something like this:
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui if( HAVE_X11_EXTENSIONS_SHAPE_H ) LINK tdeprint-shared Xext else LINK tdeprint-shared endif( ) DESTINATION ${BIN_INSTALL_DIR} )
Nope, you can't insert a condition inside a function.
The correct way is this (in this case we are using pkgconfig information):
if( WITH_XEXT ) pkg_search_module( XEXT xext ) if( NOT XEXT_FOUND ) tde_message_fatal( "You requested Xext support, but is was not found on your system (or devel package is not installed' ) endif( ) check_include_file( "X11/extensions/shape.h" HAVE_X11_EXTENSIONS_SHAPE_H ) endif( )
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared ${XEXT_LIBRARIES} DESTINATION ${BIN_INSTALL_DIR} )
On 03/09/2012 02:08 AM, Serghei Amelian wrote:
The correct way is this (in this case we are using pkgconfig information):
if( WITH_XEXT ) pkg_search_module( XEXT xext ) if( NOT XEXT_FOUND ) tde_message_fatal( "You requested Xext support, but is was not found on your system (or devel package is not installed' ) endif( ) check_include_file( "X11/extensions/shape.h" HAVE_X11_EXTENSIONS_SHAPE_H ) endif( )
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared ${XEXT_LIBRARIES} DESTINATION ${BIN_INSTALL_DIR} )
OK, I'm trying to follow this so I can help fix things, but ... where in the heck is ${XEXT_LIBRARIES} getting assigned??
On Friday 09 March 2012 15:41:15 David C. Rankin wrote:
On 03/09/2012 02:08 AM, Serghei Amelian wrote:
The correct way is this (in this case we are using pkgconfig information):
if( WITH_XEXT ) pkg_search_module( XEXT xext ) if( NOT XEXT_FOUND ) tde_message_fatal( "You requested Xext support, but is was not found on your system (or devel package is not installed' ) endif( ) check_include_file( "X11/extensions/shape.h" HAVE_X11_EXTENSIONS_SHAPE_H ) endif( )
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared ${XEXT_LIBRARIES} DESTINATION ${BIN_INSTALL_DIR} )
OK, I'm trying to follow this so I can help fix things, but ... where in the heck is ${XEXT_LIBRARIES} getting assigned??
In pkg_search_module(). Check cmake documentation for more information:
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#module:FindPkgConfig
On 03/09/2012 07:43 AM, Serghei Amelian wrote:
OK, I'm trying to follow this so I can help fix things, but ... where in
the heck is ${XEXT_LIBRARIES} getting assigned??
In pkg_search_module(). Check cmake documentation for more information:
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#module:FindPkgConfig
Hah, cmake -> can <- do some pretty cool stuff...
On 03/09/2012 02:08 AM, Serghei Amelian wrote:
Nope, you can't insert a condition inside a function.
The correct way is this (in this case we are using pkgconfig information):
if( WITH_XEXT ) pkg_search_module( XEXT xext ) if( NOT XEXT_FOUND ) tde_message_fatal( "You requested Xext support, but is was not found on your system (or devel package is not installed' ) endif( ) check_include_file( "X11/extensions/shape.h" HAVE_X11_EXTENSIONS_SHAPE_H ) endif( )
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared ${XEXT_LIBRARIES} DESTINATION ${BIN_INSTALL_DIR} )
Serghei,
I created a patch and uploaded it to bug 902 if you want to go ahead and apply it. Thanks!
I created a patch and uploaded it to bug 902 if you want to go ahead and apply it. Thanks!
I still don't understand why linking ksnapshot to Xext is necessary. That never was the previous case, even with 3.5.10. Are we patching something that should not be patched? Is the build failing for reasons not obvious?
Darrell
On 03/09/2012 10:55 AM, Darrell Anderson wrote:
I still don't understand why linking ksnapshot to Xext is necessary. That never was the previous case, even with 3.5.10. Are we patching something that should not be patched? Is the build failing for reasons not obvious?
Darrell
It is a "gcc >=4.6.2" issue. With the new mandates from gcc, any external library references are now required to be explicitly designated in the linker string. IIRC prior to 4.6.2, simply having the library on your system and the compiler being able to find it was enough. That's what the error is telling you:
/usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status
THIS is the important part of the error:
/usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line
It's gcc telling you, "I know exactly where the darn symbol is located, but I'm not going to use the damn thing until you put it in your linker string..."
:)
It is a "gcc >=4.6.2" issue. With the new mandates from gcc, any external library references are now required to be explicitly designated in the linker string. IIRC prior to 4.6.2, simply having the library on your system and the compiler being able to find it was enough. That's what the error is telling you:
/usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status
THIS is the important part of the error:
/usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line
It's gcc telling you, "I know exactly where the darn symbol is located, but I'm not going to use the damn thing until you put it in your linker string..."
Yes, I understand that gcc is becoming more persnickety with each release. All I am questioning is why the failure with ksnapshot? No previous build used Xext to build ksnapshot. I see the "-lXext" reference in my build log for kuickshow but not with ksnapshot. Seems gcc is overextending itself and linking things that previously were not linked.
Darrell
On 03/09/2012 01:04 PM, Darrell Anderson wrote:
Yes, I understand that gcc is becoming more persnickety with each release. All I am questioning is why the failure with ksnapshot? No previous build used Xext to build ksnapshot. I see the "-lXext" reference in my build log for kuickshow but not with ksnapshot. Seems gcc is overextending itself and linking things that previously were not linked.
Darrell
Hmm...,
You got me there. As far as gcc goes "mine is not to question why, only to [feed that SOB what it needs]" :)
I think looking through ksnapshot/ConfigureChecks.cmake, there is an explicit check include for the shape.h header and another referenced to $(XGETTEXT) in Makefile.am. I don't know if that is what is driving the libXext linker dependency, but that was as far as I questioned it -- then I just fed it to gcc :)
On 9 Mar 2012, David C. Rankin outgrape:
It is a "gcc >=4.6.2" issue. With the new mandates from gcc, any external library references are now required to be explicitly designated in the linker string. IIRC prior to 4.6.2, simply having the library on your system and the compiler being able to find it was enough.
Nope. That would have been far too expensive. :) Instead, the rule was that if one of the shared libraries you linked against (call it A) *itself* linked against another shared library (call it B), library B was searched in order to resolve undefined symbols in your library, and if the symbol was found in library B, library B was automatically added to the DT_NEEDED list of your own shared library, just as if you'd linked against B directly.
This at-first-sight convenient behaviour turns out to be less convenient than it might at first appear, because if library A stops linking against library B (which it is quite within its rights to do, of course), linking of your library would abruptly fail, even though nothing else may have changed in the exported symbol set of library A nor in your code. This was considered extremely ugly.
Better to follow the nice simple rule 'link against all libraries you use symbols from.'
(I did all these changes for KDE 3 long, long ago, but forgot to contribute them upstream. That's all blood under the bridge anyway.)
/usr/bin/ld: CMakeFiles/ksnapshot.dir/windowgrabber.cpp.o: undefined reference to symbol 'XShapeQueryExtension' /usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line /usr/lib/libXext.so.6: could not read symbols: Invalid operation collect2: ld returned 1 exit status
THIS is the important part of the error:
/usr/bin/ld: note: 'XShapeQueryExtension' is defined in DSO /usr/lib/libXext.so.6 so try adding it to the linker command line
It's gcc telling you, "I know exactly where the darn symbol is located, but I'm not going to use the damn thing until you put it in your linker string..."
This is the linker telling you 'I know exactly where this symbol is located *now*, but if I started silently using it this would shoot you in the head if the dependent library from which I got this information stopped depending on libXext someday.'
On 03/08/2012 06:32 PM, Serghei Amelian wrote:
On Friday 09 March 2012 02:09:57 David C. Rankin wrote:
All,
How do I add a library to a build in TDE? For some reason, the tdegraphics cmake setup does not include libXext. I have patched Makefile.am with -lXext and it is not seen by cmake or used for the build?? (Eg. I patched ksnapshot Makefile.am as follows):
tde_add_executable( ksnapshot AUTOMOC SOURCES ksnapshotiface.skel main.cpp ksnapshot.cpp regiongrabber.cpp windowgrabber.cpp ksnapshotwidget.ui LINK kdeprint-shared Xext DESTINATION ${BIN_INSTALL_DIR} )
But this is dirty hack, because the build will fail if devel package of Xext is not installed.
PS tde_add_library meaming that you add a target to Makefile, not to add a library to a target.
That did it! tdegraphics built.
NOTE with gcc >=4.6.2 EVERY external lib will have to be explicitly put in the linker string. So far this and libsane are the first ones.
How do I add a library to a build in TDE? For some reason, the tdegraphics cmake setup does not include libXext. I have patched Makefile.am with -lXext and it is not seen by cmake or used for the build?? (Eg. I patched ksnapshot Makefile.am as follows):
ksnapshot_LDADD = $(LIB_TDEPRINT) -lXext
However, the ksnapshot link still fails:
I can't answer your question to add a library. But check your build log output and cmake cache:
-- Looking for X11/extensions/shape.h -- Looking for X11/extensions/shape.h - found
//Have include X11/extensions/shape.h HAVE_X11_EXTENSIONS_SHAPE_H:INTERNAL=1
Darrell
On 03/08/2012 06:56 PM, Darrell Anderson wrote:
I can't answer your question to add a library. But check your build log output and cmake cache:
-- Looking for X11/extensions/shape.h -- Looking for X11/extensions/shape.h - found
//Have include X11/extensions/shape.h HAVE_X11_EXTENSIONS_SHAPE_H:INTERNAL=1
Darrell
Yep, -- it find the header fine, but with gcc >=4.6.2 you must explicitly pass the library to the linker or it will refuse to use it...
I'm using gcc 4.6.3-1 :(
On 9 Mar 2012, David C. Rankin said:
On 03/08/2012 06:56 PM, Darrell Anderson wrote:
I can't answer your question to add a library. But check your build log output and cmake cache:
-- Looking for X11/extensions/shape.h -- Looking for X11/extensions/shape.h - found
//Have include X11/extensions/shape.h HAVE_X11_EXTENSIONS_SHAPE_H:INTERNAL=1
Darrell
Yep, -- it find the header fine, but with gcc >=4.6.2 you must explicitly pass the library to the linker or it will refuse to use it...
This is not a GCC-specific thing: it's a local distro patch to GCC's specfiles forcing the addition of -Wl,--no-copy-dt-needed-entries to all link lines (or -Wl,--no-add-needed on older binutils, which means the same thing but is a confusing option name so is deprecated). This is a good idea in the longer run, even though it does break things now.
(A lot of distros have this patch, but not all. Upstream GCC does not have it.)
I'm using gcc 4.6.3-1 :(
This is, of course, a local distro version. What patches are applied depends on what distro you're using.
On 03/09/2012 10:54 AM, Nix wrote:
This is not a GCC-specific thing: it's a local distro patch to GCC's specfiles forcing the addition of -Wl,--no-copy-dt-needed-entries to all link lines (or -Wl,--no-add-needed on older binutils, which means the same thing but is a confusing option name so is deprecated). This is a good idea in the longer run, even though it does break things now.
(A lot of distros have this patch, but not all. Upstream GCC does not have it.)
I'm using gcc 4.6.3-1 :(
This is, of course, a local distro version. What patches are applied depends on what distro you're using.
Nix,
That got me curious and I looked at all the patches - not many, and I can't find the one your talking about. Below are all the patches applied to Archlinux gcc. Is what you are talking about there, so I know what patch is doing it??
tmp/gcc> for i in *.patch; do \ echo -e "\n################## $i ################\n" \ cat $i; done
################## gcc-4.6.2-cloog-0.17.patch ################
diff -Naur gcc-4.6-20120120-orig/configure gcc-4.6-20120120/configure --- gcc-4.6-20120120-orig/configure 2011-12-18 20:03:44.000000000 +1000 +++ gcc-4.6-20120120/configure 2012-02-03 17:55:14.885990135 +1000 @@ -6049,8 +6049,8 @@ LDFLAGS="${_cloog_saved_LDFLAGS} ${clooglibs} ${ppllibs}"
if test "${cloog_org}" = yes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version 0.16.1 of CLooG" >&5 -$as_echo_n "checking for version 0.16.1 of CLooG... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version 0.17 of CLooG" >&5 +$as_echo_n "checking for version 0.17 of CLooG... " >&6; } if test "${gcc_cv_cloog_ct_0_14_0+set}" = set; then : $as_echo_n "(cached) " >&6 else @@ -6061,8 +6061,7 @@ main () { #if CLOOG_VERSION_MAJOR != 0 \ - || CLOOG_VERSION_MINOR != 16 \ - || CLOOG_VERSION_REVISION < 1 + || CLOOG_VERSION_MINOR != 17 choke me #endif ; diff -Naur gcc-4.6-20120120-orig/gcc/graphite-clast-to-gimple.c gcc-4.6-20120120/gcc/graphite-clast-to-gimple.c --- gcc-4.6-20120120-orig/gcc/graphite-clast-to-gimple.c 2011-03-13 08:05:38.000000000 +1000 +++ gcc-4.6-20120120/gcc/graphite-clast-to-gimple.c 2012-02-03 17:51:47.943463879 +1000 @@ -1367,7 +1367,7 @@ /* Change cloog output language to C. If we do use FORTRAN instead, cloog will stop e.g. with "ERROR: unbounded loops not allowed in FORTRAN.", if we pass an incomplete program to cloog. */ - options->language = LANGUAGE_C; + options->language = CLOOG_LANGUAGE_C;
/* Enable complex equality spreading: removes dummy statements (assignments) in the generated code which repeats the
################## gcc-hash-style-both.patch ################
--- gcc/config/alpha/linux-elf.h.orig 2010-12-09 23:27:07.000000000 +1000 +++ gcc/config/alpha/linux-elf.h 2011-03-11 10:01:47.770000457 +1000 @@ -41,7 +41,7 @@
#define ELF_DYNAMIC_LINKER LINUX_DYNAMIC_LINKER
-#define LINK_SPEC "-m elf64alpha %{G*} %{relax:-relax} \ +#define LINK_SPEC "-m elf64alpha --hash-style=both %{G*} %{relax:-relax} \ %{O*:-O3} %{!O*:-O1} \ %{shared:-shared} \ %{!shared: \ --- gcc/config/i386/linux64.h.orig 2011-03-03 08:35:36.000000000 +1000 +++ gcc/config/i386/linux64.h 2011-03-11 10:01:47.770000457 +1000 @@ -78,7 +78,7 @@ %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}"
#undef LINK_SPEC -#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} \ +#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386} --hash-style=both \ %{shared:-shared} \ %{!shared: \ %{!static: \ --- gcc/config/i386/linux.h.orig 2011-01-15 04:45:06.000000000 +1000 +++ gcc/config/i386/linux.h 2011-03-11 10:01:47.770000457 +1000 @@ -104,7 +104,7 @@ { "dynamic_linker", LINUX_DYNAMIC_LINKER }
#undef LINK_SPEC -#define LINK_SPEC "-m %(link_emulation) %{shared:-shared} \ +#define LINK_SPEC "-m %(link_emulation) --hash-style=both %{shared:-shared} \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ --- gcc/config/ia64/linux.h.orig 2010-12-09 23:27:07.000000000 +1000 +++ gcc/config/ia64/linux.h 2011-03-11 10:01:47.770000457 +1000 @@ -64,7 +64,7 @@ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-ia64.so.2"
#undef LINK_SPEC -#define LINK_SPEC "\ +#define LINK_SPEC "--hash-style=both \ %{shared:-shared} \ %{!shared: \ %{!static: \ --- gcc/config/rs6000/linux64.h.orig 2011-02-11 03:30:10.000000000 +1000 +++ gcc/config/rs6000/linux64.h 2011-03-11 10:03:34.280000457 +1000 @@ -389,11 +389,11 @@ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
-#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC32 "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " LINUX_DYNAMIC_LINKER32 "}}"
-#define LINK_OS_LINUX_SPEC64 "-m elf64ppc %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC64 "-m elf64ppc --hash-style=both %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}"
--- gcc/config/rs6000/sysv4.h.orig 2011-01-28 04:36:03.000000000 +1000 +++ gcc/config/rs6000/sysv4.h 2011-03-11 10:01:47.773333792 +1000 @@ -830,7 +830,7 @@ #define LINUX_DYNAMIC_LINKER \ CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
-#define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \ +#define LINK_OS_LINUX_SPEC "-m elf32ppclinux --hash-style=both %{!shared: %{!static: \ %{rdynamic:-export-dynamic} \ -dynamic-linker " LINUX_DYNAMIC_LINKER "}}"
--- gcc/config/s390/linux.h.orig 2010-12-09 23:27:07.000000000 +1000 +++ gcc/config/s390/linux.h 2011-03-11 10:01:47.770000457 +1000 @@ -77,7 +77,7 @@
#undef LINK_SPEC #define LINK_SPEC \ - "%{m31:-m elf_s390}%{m64:-m elf64_s390} \ + "%{m31:-m elf_s390}%{m64:-m elf64_s390} --hash-style=both \ %{shared:-shared} \ %{!shared: \ %{static:-static} \ --- gcc/config/sparc/linux64.h.orig 2011-02-17 23:57:21.000000000 +1000 +++ gcc/config/sparc/linux64.h 2011-03-11 10:01:47.770000457 +1000 @@ -113,7 +113,7 @@ { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \ { "link_arch", LINK_ARCH_SPEC },
-#define LINK_ARCH32_SPEC "-m elf32_sparc -Y P,%R/usr/lib %{shared:-shared} \ +#define LINK_ARCH32_SPEC "-m elf32_sparc --hash-style=both -Y P,%R/usr/lib %{shared:-shared} \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ @@ -121,7 +121,7 @@ %{static:-static}} \ "
-#define LINK_ARCH64_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \ +#define LINK_ARCH64_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ @@ -193,7 +193,7 @@ #else /* !SPARC_BI_ARCH */
#undef LINK_SPEC -#define LINK_SPEC "-m elf64_sparc -Y P,%R/usr/lib64 %{shared:-shared} \ +#define LINK_SPEC "-m elf64_sparc --hash-style=both -Y P,%R/usr/lib64 %{shared:-shared} \ %{!shared: \ %{!static: \ %{rdynamic:-export-dynamic} \ --- gcc/config/sparc/linux.h.orig 2011-01-27 06:30:12.000000000 +1000 +++ gcc/config/sparc/linux.h 2011-03-11 10:01:47.770000457 +1000 @@ -74,7 +74,7 @@ #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
#undef LINK_SPEC -#define LINK_SPEC "-m elf32_sparc -Y P,/usr/lib %{shared:-shared} \ +#define LINK_SPEC "-m elf32_sparc --hash-style=both -Y P,/usr/lib %{shared:-shared} \ %{!mno-relax:%{!r:-relax}} \ %{!shared: \ %{!static: \
################## gcc_pure64.patch ################
diff -Naur gcc-4.2.0.orig/gcc/config/i386/linux64.h gcc-4.2.0/gcc/config/i386/linux64.h --- gcc-4.2.0.orig/gcc/config/i386/linux64.h 2007-05-16 19:21:19.000000000 -0400 +++ gcc-4.2.0/gcc/config/i386/linux64.h 2007-05-18 17:04:05.000000000 -0400 @@ -49,8 +49,8 @@ When the -shared link option is used a final link is not being done. */
-#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2" -#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2" +#define GLIBC_DYNAMIC_LINKER32 "/lib32/ld-linux.so.2" +#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-linux-x86-64.so.2"
#undef LINK_SPEC #define LINK_SPEC "%{!m32:-m elf_x86_64} %{m32:-m elf_i386} \ diff -Naur gcc-4.2.0.orig/gcc/config/i386/t-linux64 gcc-4.2.0/gcc/config/i386/t-linux64 --- gcc-4.2.0.orig/gcc/config/i386/t-linux64 2007-05-16 19:21:19.000000000 -0400 +++ gcc-4.2.0/gcc/config/i386/t-linux64 2007-05-18 17:04:36.000000000 -0400 @@ -6,7 +6,7 @@
MULTILIB_OPTIONS = m64/m32 MULTILIB_DIRNAMES = 64 32 -MULTILIB_OSDIRNAMES = ../lib64 $(if $(wildcard $(shell echo $(SYSTEM_HEADER_DIR))/../../usr/lib32),../lib32,../lib) +MULTILIB_OSDIRNAMES = ../lib ../lib32
LIBGCC = stmp-multilib INSTALL_LIBGCC = install-multilib
On 9 Mar 2012, David C. Rankin outgrape:
On 03/09/2012 10:54 AM, Nix wrote:
This is not a GCC-specific thing: it's a local distro patch to GCC's specfiles forcing the addition of -Wl,--no-copy-dt-needed-entries to all link lines (or -Wl,--no-add-needed on older binutils, which means the same thing but is a confusing option name so is deprecated). This is a good idea in the longer run, even though it does break things now.
[...]
That got me curious and I looked at all the patches - not many, and I can't find the one your talking about. Below are all the patches applied to Archlinux gcc. Is what you are talking about there, so I know what patch is doing it??
No, it's none of those.
... I was wrong. This is not a GCC thing at all. It's a binutils 2.22 thing, and upstream *is* affected, so this is not a vendor-specific patch. From binutils-2.22/ld/NEWS:
* --copy-dt-needed-entries is no longer enabled by default. Instead --no-copy-dt-needed-entries is the default.
(This has been a right mess. This option name has changed three times and has been variously forced in by vendor patches to GCC specfiles, forced in by upstream GCC -- in unreleased code only -- and then, finally, forced on by a change to the default in GNU ld. I missed the last of these changes.)
On 03/08/2012 06:56 PM, Darrell Anderson wrote:
I can't answer your question to add a library. But check your build log output and cmake cache:
-- Looking for X11/extensions/shape.h -- Looking for X11/extensions/shape.h - found
//Have include X11/extensions/shape.h HAVE_X11_EXTENSIONS_SHAPE_H:INTERNAL=1
Darrell
Yep, -- it finds the header fine, but with gcc >=4.6.2 you must explicitly pass the library to the linker or it will refuse to use it...
I'm using gcc 4.6.3-1 :(