[CMake] Creating libraries (DLL) in windows
Andreas Pokorny
andreas.pokorny at gmail.com
Sat Aug 2 06:41:13 EDT 2008
Hello,
2008/8/2 Leopold Palomo Avellaneda <leo at alaxarxa.net>:
> A Dissabte 02 Agost 2008, Hendrik Sattler va escriure:
>> Am Samstag, 2. August 2008 01:21:01 schrieb Leopold Palomo Avellaneda:
>> > > [...]
>> > > BTW: With gcc >= 4 on linux, you may also want to use
>> > > #define MYLIB_EXPORT __attribute__((visibility("default")))
>> > > and compile with -fvisibility=hidden. That allows to not export symbols
>> > > for internal classes and it's faster at runtime.
>> >
>> > faster in terms of?
>>
>> Time to link the library at application start.
>
> because when the program loads, search in a list of less symbols, so it finds
> its faster making start is less time ....
If you also have to support older gcc based compilers, you can write a
linker map,
that truns all symbols into local symbols and the symbols that should
be externally
visible can "stay" global.
mylib.map
{
global:
FunctionX;
FunctionY;
local:
*;
}
Then in CMake:
SET_TARGET_PROPERTIES(MyLib PROPERTIES
"-Wl,--version-script=${MyLib_SOURCE_DIR}/mylib.map -Wl,--strip-all")
Then stripping the library should remove all unnecessary symbols. Note
that you have to invest some time maintaining the symbols, and that you
probably have to mangle the C++ symbols properly. (You could do that
with "for x in ${PUBLIC_CLASSES} ; do nm libMyLib.so | grep ${x} ; done")
kind regards
Andreas Pokorny
More information about the CMake
mailing list