Re: [CMake] target_link_libraries of MODULE

2013-01-13 Thread Paul Chavent

On 01/12/2013 11:04 PM, Rolf Eike Beer wrote:

Paul Chavent wrote:

Hi.

I'm working on a project basically compound of :

 - a core library that can be static or dynamic

 add_library(Foo-lib ${FOO_LIB_SOURCES})

 - an executable that rely on the main library :

 add_executable(Foo-bin ${FOO_BIN_SOURCES})
 target_link_libraries(Foo-bin Foo-lib)

 - a dlopenable plugin that need some functions of the Foo library :

 add_library(Foo-plugin MODULE ${FOO_PLUGIN_SOURCES})
 target_link_libraries(Foo-plugin Foo-lib)

I don't need the last line under linux : i usually don't link
Foo-plugin against Foo-lib.
And that's good because if i choose to build a static Foo-lib, i
don't want in Foo-plugin all symbols that will be already present in
Foo-bin.

Under Windows (MinGW) or MacOSX, without this last line i have
unresolved symbols when i compile Foo-plugin. So i let it be.
The problem comes when i try to compile static Foo-lib. I have
segfault at the Foo-plugin load time, probably because of some static
class/variables initializations.


What is the good practice please ? Isn't there any option to tell to
ignore unresolved symbols for MODULE ? They will be resolved at load
time !


They wont, or only by chance. In fact you would need the link line on many 
recent Linux distributions also, that depends on the link flags. Take the 
situation where you have a static library: the symbols of that library may me 
removed by a linker that is advanced enough, as it may detect that they are 
never called from inside your executable. So they are gone when your plugin 
comes to life and it may need them. So: yes, you always need to link.


Good, example. I didn't considered this situation...



I have no idea what your problems with a static lib are, but static class 
objects are usually a bad idea, for reasons you may already have found out ;)



I will let the link with the core library and try to solve my problems in this 
configuration...

Thank for your advices.

Paul.


Eike
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake



--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


[CMake] target_link_libraries of MODULE

2013-01-12 Thread Paul Chavent

Hi.

I'm working on a project basically compound of :

 - a core library that can be static or dynamic

 add_library(Foo-lib ${FOO_LIB_SOURCES})

 - an executable that rely on the main library :

 add_executable(Foo-bin ${FOO_BIN_SOURCES})
 target_link_libraries(Foo-bin Foo-lib)

 - a dlopenable plugin that need some functions of the Foo library :

 add_library(Foo-plugin MODULE ${FOO_PLUGIN_SOURCES})
 target_link_libraries(Foo-plugin Foo-lib)

I don't need the last line under linux : i usually don't link Foo-plugin 
against Foo-lib.
And that's good because if i choose to build a static Foo-lib, i don't want in 
Foo-plugin all symbols that will be already present in Foo-bin.

Under Windows (MinGW) or MacOSX, without this last line i have unresolved 
symbols when i compile Foo-plugin. So i let it be.
The problem comes when i try to compile static Foo-lib. I have segfault at the 
Foo-plugin load time, probably because of some static class/variables 
initializations.


What is the good practice please ? Isn't there any option to tell to ignore 
unresolved symbols for MODULE ? They will be resolved at load time !

Regards.

Paul.

P.S i use a 2.8.10 version of cmake.



--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] target_link_libraries of MODULE

2013-01-12 Thread Rolf Eike Beer

Paul Chavent wrote:

Hi.

I'm working on a project basically compound of :

 - a core library that can be static or dynamic

 add_library(Foo-lib ${FOO_LIB_SOURCES})

 - an executable that rely on the main library :

 add_executable(Foo-bin ${FOO_BIN_SOURCES})
 target_link_libraries(Foo-bin Foo-lib)

 - a dlopenable plugin that need some functions of the Foo library 
:


 add_library(Foo-plugin MODULE ${FOO_PLUGIN_SOURCES})
 target_link_libraries(Foo-plugin Foo-lib)

I don't need the last line under linux : i usually don't link
Foo-plugin against Foo-lib.
And that's good because if i choose to build a static Foo-lib, i
don't want in Foo-plugin all symbols that will be already present in
Foo-bin.

Under Windows (MinGW) or MacOSX, without this last line i have
unresolved symbols when i compile Foo-plugin. So i let it be.
The problem comes when i try to compile static Foo-lib. I have
segfault at the Foo-plugin load time, probably because of some static
class/variables initializations.


What is the good practice please ? Isn't there any option to tell to
ignore unresolved symbols for MODULE ? They will be resolved at load
time !


They wont, or only by chance. In fact you would need the link line on 
many recent Linux distributions also, that depends on the link flags. 
Take the situation where you have a static library: the symbols of that 
library may me removed by a linker that is advanced enough, as it may 
detect that they are never called from inside your executable. So they 
are gone when your plugin comes to life and it may need them. So: yes, 
you always need to link.


I have no idea what your problems with a static lib are, but static 
class objects are usually a bad idea, for reasons you may already have 
found out ;)


Eike
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake