[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