[dependancies between static libraries] is it a bug or do i miss something?
I spent 1 hour finding why I have undefined symbols in my static libraries and there seams to be a bug in how cmake manage inter static linking under nux (don't know about visual)
if lib1 depends on lib2, resulting lib1 have undefined symbols (lib2 symbol not defined in lib1)
so if you use lib1 in you exec it fails saying lib2 symbols aren't defined
What i've done to fix it:
for all libraries XXX with dependencies lib , i replace all
IF (BUILD_SHARED_LIBS)
ADD_LIBRARY(XXX SHARED XXXSOURCES)
TARGET_LINK_LIBRARIES(XXX DEPENDANTLIB)
ELSE()
ADD_LIBRARY(XXX STATIC XXXSOURCES)
ENDIF (BUILD_SHARED_LIBS)
with
IF (BUILD_SHARED_LIBS)
ADD_LIBRARY(XXX SHARED XXXSOURCES) (perhaps shared should be omitted as build shared libs only there to use MD runtime under MSVC...havent test under windows yet)
TARGET_LINK_LIBRARIES(XXX DEPENDANTLIBS)
ELSE()
if(win32)
ADD_LIBRARY(XXX STATIC XXXSOURCES) ..perhaps something should be done but haven't test
else()
ADD_LIBRARY(XXXtemp STATIC XXXSOURCES)
add_custom_target(XXX ALL
COMMAND ${CMAKE_AR} rcT libXXX.a $<TARGET_FILE:XXXtemp> $<TARGET_FILE:DEPENDANTLIB1> ..etc.. )
endif(win32)
ENDIF (BUILD_SHARED_LIBS)
This workaround seams to duplicate symbols but linker do the sorting
I use cmake v.2.8 perhaps further versions doesn't have the same behavior
ps: I know: Why do I use static libraries under linux as it doesn't require code instrumentation to build shared? I don't have argument against that :)