Re: [CMake] Link order (Ubuntu)

2018-11-07 Thread Giorgio Scorzelli
I finally found this hack:

  target_link_libraries(MyExe B $ 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 
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 
> 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 
>>> wrote:
>>> >
>>> > I read the docs about  LINK_INTERFACE_MULTIPLICITYtoo.
>>> > 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 
>>> 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
>>
>
--

Re: [CMake] Link order (Ubuntu)

2018-11-07 Thread Bo Zhou
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 
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 
>> wrote:
>> >
>> > I read the docs about  LINK_INTERFACE_MULTIPLICITYtoo.
>> > 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 
>> 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 

Re: [CMake] Link order (Ubuntu)

2018-11-06 Thread Giorgio Scorzelli
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 
> wrote:
> >
> > I read the docs about  LINK_INTERFACE_MULTIPLICITYtoo.
> > 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  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


Re: [CMake] Link order (Ubuntu)

2018-11-06 Thread Robert Maynard
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  wrote:
>
> I read the docs about  LINK_INTERFACE_MULTIPLICITYtoo.
> 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 
>  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  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


Re: [CMake] Link order (Ubuntu)

2018-11-06 Thread Giorgio Scorzelli
I read the docs about  LINK_INTERFACE_MULTIPLICITYtoo.
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  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


Re: [CMake] Link order (Ubuntu)

2018-11-06 Thread Robert Maynard
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  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


Re: [CMake] Link order (Ubuntu)

2018-11-06 Thread scrgiorgio
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


Re: [CMake] Link order (Ubuntu)

2018-11-05 Thread Bo Zhou
Hi

This is the classical issue of GNU toolchain for many years, usually super
painful when the program has to be linked with several static libraries.

One easy way to solve this issue is that you could specify the same library
for multiple times if the manual order really doesn't work well, then the
generated binary might have the complete symbols.

Thanks very much.

On Tue, Nov 6, 2018 at 9:53 AM scrgiorgio  wrote:

> i have the following CMakeList.txt:
>
>
> add_library(ImpLib SHARED IMPORTED GLOBAL)
> set_property(TARGET ImpLib APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
> ...)
> set_target_properties(ImpLib PROPERTIES IMPORTED_LOCATION ...)
>
> add_library(A SHARED)
> # COMMENTED! A uses ImpLib but cannot link it because some third-party
> executables requires 'run-time symbol resolution'
> # target_link_libraries(A PUBLIC  ImpLib )
>
> add_library(B SHARED)
> target_link_libraries(B PUBLIC A)
> # COMMENTED! B uses ImpLib but cannot link it for the same previous reason
> # target_link_libraries(B PUBLIC  ImpLib )
>
> # my executable requires ImpLib explicit/default cmake linking
> add_executable(MyExe)
> target_link_libraries(MyExe B)
> target_link_libraries(MyExe ImpLib )
>
> The CMake generated link order is (g++ -o  ): "B;ImportedExtLib;A"
> But in this way A cannot find symbols from ImpLib (at least using g++).
>
> The right order is: "B;A;ImpLib"
>
> I tried with "target_link_libraries(A INTERFACE ImpLib)" but then B will
> link ImpLib
>
> I tried "set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}
> -Wl,--start-group")" but sometimes it does not work.
>
> is it doable? Can I force the right order?
>
>
>
>
>
> --
> 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


[CMake] Link order (Ubuntu)

2018-11-05 Thread scrgiorgio
i have the following CMakeList.txt:


add_library(ImpLib SHARED IMPORTED GLOBAL)
set_property(TARGET ImpLib APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
...)
set_target_properties(ImpLib PROPERTIES IMPORTED_LOCATION ...)

add_library(A SHARED)
# COMMENTED! A uses ImpLib but cannot link it because some third-party
executables requires 'run-time symbol resolution' 
# target_link_libraries(A PUBLIC  ImpLib )

add_library(B SHARED)
target_link_libraries(B PUBLIC A)
# COMMENTED! B uses ImpLib but cannot link it for the same previous reason
# target_link_libraries(B PUBLIC  ImpLib )

# my executable requires ImpLib explicit/default cmake linking
add_executable(MyExe)
target_link_libraries(MyExe B)
target_link_libraries(MyExe ImpLib )

The CMake generated link order is (g++ -o  ): "B;ImportedExtLib;A"
But in this way A cannot find symbols from ImpLib (at least using g++).

The right order is: "B;A;ImpLib"

I tried with "target_link_libraries(A INTERFACE ImpLib)" but then B will
link ImpLib

I tried "set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}
-Wl,--start-group")" but sometimes it does not work.

is it doable? Can I force the right order?





--
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