I finally found this hack: target_link_libraries(MyExe B $<TARGET_FILE:A> ImpLib)
so I'm forcing the 'A' dependency to appear before the ImpLib. Note that if I use: target_link_libraries(MyExe B A ImpLib) it does not work. I think it's because Cmake it's internally erasing unnecessary dependencies. Hope it helps other developers. Il giorno mer 7 nov 2018 alle ore 19:10 Bo Zhou <bo.schwarzst...@gmail.com> ha scritto: > Oh, if that's shared libraries, maybe you have to setup the > LD_LIBRARY_PATH well for the shared libraries before linking, it just > allows the linker to be able to locate the all necessary dynamic libraries > during the linking. It happens sometimes on Linux, but not exists on OSX > and Windows. > > On Tue, Nov 6, 2018 at 11:19 PM Giorgio Scorzelli <scrgior...@gmail.com> > wrote: > >> Thanks for you help. >> >> They are really shared lib, not static. I know it sounds weird: it's a >> python extension which must not link the ${PYTHON_LIBRARY} (according to >> official docs; in fact If I do so I get a segmentation fault) but finally >> in my executable,a sort of custom/home made ${PYTHON_EXECUTABLE}, I have >> to link the ${PYTHON_LIBRARY}. >> >> About the "B;A;ImportedExtLib;B;A" order. I agree too: it SHOULD work. >> Let's say I do: >> >> target_link_libraries(MyExe B A ImpLib) >> >> in command line (make VERBOSE=1) I;m getting >> >> g++ .... -o MyExe B A ImpLib A >> >> The last "A" is coming from target_link_libraries(B PUBLIC A) and the >> linker is complaining that this last "A" has undefined symbols. >> >> Thanks.Giorgio. >> >> >> >> >> >> >> >> >> Il giorno mar 6 nov 2018 alle ore 06:59 Robert Maynard < >> robert.mayn...@kitware.com> ha scritto: >> >>> You have order dependent static libraries which can be solved by >>> constructing a cycle. As Bo stated by constructing the cycle >>> B;A;ImportedExtLib;B;A each library can see each other. >>> >>> Looking at your original code example it looks like you are importing >>> the libraries as SHARED, but I think these are actually static >>> libraries and should be imported as such so that CMake does the >>> automatic cycle creation. In general CMake doesn't do cycle creation >>> for shared libraries as they are not link order dependent. >>> On Tue, Nov 6, 2018 at 8:51 AM Giorgio Scorzelli <scrgior...@gmail.com> >>> wrote: >>> > >>> > I read the docs about LINK_INTERFACE_MULTIPLICITY too. >>> > But I'm not in the situation of a "cyclic dependency" so I 'm not sure >>> if it solve my problem. >>> > In my case (with B A and ImpLib) what would be the syntax? >>> > >>> > Il giorno mar 6 nov 2018 alle ore 06:30 Robert Maynard < >>> robert.mayn...@kitware.com> ha scritto: >>> >> >>> >> The target_link_libraries has a property called >>> >> LINK_INTERFACE_MULTIPLICITY that should help you out. >>> >> >>> https://cmake.org/cmake/help/v3.13/command/target_link_libraries.html#cyclic-dependencies-of-static-libraries >>> >> >>> >> >>> >> On Tue, Nov 6, 2018 at 8:24 AM scrgiorgio <scrgior...@gmail.com> >>> wrote: >>> >> > >>> >> > Thanks for the help, >>> >> > >>> >> > trying this (or any combination): >>> >> > >>> >> > target_link_libraries(MyExe B) >>> >> > target_link_libraries(MyExe A ) >>> >> > target_link_libraries(MyExe ImpLib) >>> >> > >>> >> > I get this order: >>> >> > >>> >> > 'B;...whatever...;A;ImpLib" >>> >> > >>> >> > and the last past is causing the problem. Apparently there is no >>> way to >>> >> > change the right part (-Wl,--start-group -Wl,--end-groun sometimes >>> work, >>> >> > sometimes not). >>> >> > Any advice? >>> >> > >>> >> > >>> >> > >>> >> > >>> >> > -- >>> >> > Sent from: http://cmake.3232098.n2.nabble.com/ >>> >> > -- >>> >> > >>> >> > Powered by www.kitware.com >>> >> > >>> >> > Please keep messages on-topic and check the CMake FAQ at: >>> http://www.cmake.org/Wiki/CMake_FAQ >>> >> > >>> >> > Kitware offers various services to support the CMake community. For >>> more information on each offering, please visit: >>> >> > >>> >> > CMake Support: http://cmake.org/cmake/help/support.html >>> >> > CMake Consulting: http://cmake.org/cmake/help/consulting.html >>> >> > CMake Training Courses: http://cmake.org/cmake/help/training.html >>> >> > >>> >> > Visit other Kitware open-source projects at >>> http://www.kitware.com/opensource/opensource.html >>> >> > >>> >> > Follow this link to subscribe/unsubscribe: >>> >> > https://cmake.org/mailman/listinfo/cmake >>> >> -- >> >> Powered by www.kitware.com >> >> Please keep messages on-topic and check the CMake FAQ at: >> http://www.cmake.org/Wiki/CMake_FAQ >> >> Kitware offers various services to support the CMake community. For more >> information on each offering, please visit: >> >> CMake Support: http://cmake.org/cmake/help/support.html >> CMake Consulting: http://cmake.org/cmake/help/consulting.html >> CMake Training Courses: http://cmake.org/cmake/help/training.html >> >> Visit other Kitware open-source projects at >> http://www.kitware.com/opensource/opensource.html >> >> Follow this link to subscribe/unsubscribe: >> https://cmake.org/mailman/listinfo/cmake >> >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake