[CMake] Link error with shared c library using gcc on HP-UX

Michael Hufer michael.hufer at swissrisk.com
Tue Aug 12 05:28:22 EDT 2008


Hi,
I get a link error when linking a shared C library on HP-UX using gcc.
the compiler complains about:
---
Linking C shared library libxgentls.sl
gcc: archive: No such file or directory
gcc: default: No such file or directory
---
the command line of the link (link.txt in the build directory) is:
---
/space/opt/hp-gcc-4.2.1/bin/gcc  -fPIC -g  -L/GenSpace/mhufer/xgen-head/external/HP-UX/tcl-8.5/lib -L/GenSpace/mhufer/xgen-head/external/HP-UX/openssl-0.9.8h/lib -L/GenSpace/mhufer/xgen-head/external/HP-UX/openssl-0.9.8h/lib -shared -Wl,-E,-b,
+nodefaultrpath -Wl,+hlibxgentls.sl.1.5.2 -o libxgentls.sl.1.5.2 
CMakeFiles/xgentls.dir/tls.o CMakeFiles/xgentls.dir/tlsBIO.o 
CMakeFiles/xgentls.dir/tlsIO.o 
CMakeFiles/xgentls.dir/tlsX509.o -L/GenSpace/mhufer/xgen-head/lib/HP-UX -a 
archive -ltclstub8.5 -a default -lssl -lcrypto -Wl,
+b/GenSpace/mhufer/xgen-head/lib/HP-UX 
---
The '-a archive' and '-a default' arguments are clearly wrong here! 

In the share/cmake-2.6/Modules/Platform/HP-UX.cmake
the comment:
---
# Initialize C and CXX link type selection flags.  These flags are
# used when building a shared library, shared module, or executable
# that links to other libraries to select whether to use the static or
# shared versions of the libraries.  Note that C modules and shared
# libs are built using ld directly so we leave off the "-Wl," portion.
FOREACH(type SHARED_LIBRARY SHARED_MODULE)
  SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-a archive")
  SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-a default")
ENDFOREACH(type)
---
is clearly wrong as the link.txt generated by cmake clearly calls the compiler 
(gcc) NOT ld directly as the writer of the note in the comment believed! It 
may be a native HP compiler vs. gcc difference, thought. 

I changed the offending lines in HP-UX.cmake to 
--
FOREACH(type SHARED_LIBRARY SHARED_MODULE)
  SET(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-a,archive")
  SET(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-a,default")
ENDFOREACH(type)
--
and it now links fine.
---
bash> cmake --version
cmake version 2.6-patch 1
---
Note:
This issue seems to be related to Bug report 158 in the cmake bug tracker.

Regards,
-- 
Michael Hufer
Software Developer
--------------------------------
Swissrisk Financial Systems

www.swissrisk.com
-------------------------------
Swissrisk Financial Systems GmbH
Sitz / Registered Office: Holzhausenstrasse 44, 60322 Frankfurt/Main
HRB-Nr. / Commercial Register No.  83397
Geschäftsführer / Managing Directors: Dr. Peter Marshall, Jürgen Dahmen, 
Andreas Wagner, Peter Hemmer


More information about the CMake mailing list