[CMake] Linking Problems when using Cmake

Dalal, Dhaval dalal at bnl.gov
Wed Jun 29 11:24:27 EDT 2005


Hi Everyone
I am trying to compile Dcmtk(open-source Dicom Library), ITK and FLTK on my Linux Platform
(gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-52))
I got them successfulle compiled on the Windows Platform but I am facing strage errors on Linux and I have been unable to fix them.
I have checked the order of libraries (in the way they are linked to the executable) and
also tweaked around quite a bit but to no awail.
The error i get is
"Building executable /usr/local/gui/ti...
/usr/bin/ld: cannot find -lnetapi32
collect2: ld returned 1 exit status
make[1]: *** [/usr/local/gui/ti] Error 1"

My CMakeLists.txt file is
------------------------------------------------------------ 
PROJECT(DCMTKTEST)



FIND_PACKAGE(DCMTK)

FIND_PACKAGE(ZLIB)


 #Find ITK.

FIND_PACKAGE(ITK)

IF(ITK_FOUND)

  INCLUDE(${ITK_USE_FILE})

ELSE(ITK_FOUND)

  MESSAGE( FATAL_ERROR 
"Cannot build without ITK.  Please set ITK_DIR.")

ENDIF(ITK_FOUND)





# Make sure the compiler can find include files from our library.

INCLUDE_DIRECTORIES(
 ${DCMTK_DIR}/imagectn/include
 ${DCMTK_ofstd_INCLUDE_DIR}

 ${DCMTK_config_INCLUDE_DIR}

 ${DCMTK_dcmdata_INCLUDE_DIR}
 ${DCMTK_DIR}/dcmnet/include

 ${DCMTK_dcmingle_INCLUDE_DIR}

  )



# set certain project wide flags

#SET(CMAKE_C_FLAGS "" CACHE STRING "Flags for C compiler." FORCE)

#SET(CMAKE_C_FLAGS_DEBUG "/nologo /MDd /W3 /GX /Z7 /Od /GR /YX " CACHE STRING "Win32 Debug Options #C Code" FORCE)

#SET(CMAKE_C_FLAGS_RELEASE "/nologo /MD /W3 /GX /O2 /GR /YX" CACHE STRING "Win32 Release Options C #Code" FORCE)

#SET(CMAKE_CXX_FLAGS "" CACHE STRING "Flags used by the compiler during all build types." FORCE)

#SET(CMAKE_CXX_FLAGS_DEBUG "/nologo /MDd /W3 /GX /Z7 /Od /GR /YX" CACHE STRING "Win32 Debug #Options C++ Code" FORCE)

#SET(CMAKE_CXX_FLAGS_RELEASE "/nologo /MD /W3 /GX /O2 /GR /YX" CACHE STRING "Win32 Release Options #C++ Code" FORCE)

#SET(CMAKE_EXE_LINKER_FLAGS "/INCREMENTAL:NO" CACHE STRING "Win32 Linker Flags" FORCE)



FIND_LIBRARY(DCMTK_imagedb_LIBRARY libimagedb ${DCMTK_DIR}/imagectn/libsrc)

FIND_LIBRARY(DCMTK_dcmnet_LIBRARY dcmnet ${DCMTK_DIR}/dcmnet/libsrc)





# set _REENTRANT flag

ADD_DEFINITIONS(-D_REENTRANT)

ADD_DEFINITIONS(-DHAVE_CONFIG_H)

 



INCLUDE(${CMAKE_ROOT}/Modules/FindFLTK.cmake)

IF(HAS_FLTK)

  INCLUDE_DIRECTORIES(

    ${FLTK_INCLUDE_DIR}

    )

  LINK_LIBRARIES( 

    ${FLTK_LIBRARIES}

    )

ENDIF(HAS_FLTK)



INCLUDE_DIRECTORIES(

  ${DCMTKTEST_SOURCE_DIR} 

  ${DCMTKTEST_BINARY_DIR} 

  ) 



#IF(CYGWIN)

#  LINK_LIBRARIES(ole32 uuid comctl32 wsock32 supc++ -lm -lgdi32)

#ENDIF(CYGWIN)



SET( DCMTK_GUI_SRCS

  dcmtkui.fl

  prefsui.fl

 )



IF(FLTK_WRAP_UI)

  FLTK_WRAP_UI(ti ${DCMTK_GUI_SRCS})

 ENDIF(FLTK_WRAP_UI)



SET(DCMTKTEST_SRCS

  cnf.h

  cnf.cxx

  cnfexnt.cxx

  cnfpriv.cxx

  cnfpriv.h
  main.cpp

  ti.cxx 

  ti.h

  tinet.cxx

  tinet.h 

  tiquery.cxx

  tiquery.h

  tiui.cxx

  tiui.h

  prefs.h

  prefs.cpp

  dcmtk.h

  dcmtk.cpp 

  )



ADD_EXECUTABLE( ti ${DCMTKTEST_SRCS} )





 TARGET_LINK_LIBRARIES(

  ti 

  netapi32
  wsock32
  ${DCMTK_ofstd_LIBRARY} 
  ${DCMTK_dcmdata_LIBRARY}
  ${DCMTK_dcmnet_LIBRARY}
  ${DCMTK_imagedb_LIBRARY}

  ${DCMTK_dcmimgle_LIBRARY}
  ${ZLIB_LIBRARY} 
 # ITKCommon

 )
------------------------------------------------------  
 If i change the order , like 
 TARGET_LINK_LIBRARIES(
  ti 
  wsock32
  netapi32
  ${DCMTK_ofstd_LIBRARY} 
  ${DCMTK_dcmdata_LIBRARY}
  ${DCMTK_dcmnet_LIBRARY}
  ${DCMTK_imagedb_LIBRARY}
  ${DCMTK_dcmimgle_LIBRARY}
  ${ZLIB_LIBRARY} 
 # ITKCommon
 )

I get the following error
"Building dependencies. cmake.depends...
Building executable /usr/local/gui/ti...
/usr/bin/ld: cannot find -lwsock32
collect2: ld returned 1 exit status"

I am sure its some linking problem...
any help/hints will be greatly appreciated.
Thanks
Dhaval



More information about the CMake mailing list