[CMake] Creating a dynamic library with a static library hidden inside

Michael Leong michael at voltage.com
Tue Jun 16 17:58:28 EDT 2009


Hi Tyler,

Thanks for your response.

> >         add_library(libeay-static STATIC IMPORTED)
> >         set_property(TARGET libeay-static PROPERTY IMPORTED_LOCATION win32/lib/libeay32.lib)
> >         add_library(ssleay-static STATIC IMPORTED)
> >         set_property(TARGET ssleay-static PROPERTY IMPORTED_LOCATION win32/lib/ssleay32.lib)
> >         target_link_libraries(dynlib libeay-static ssleay-static)
>
> I haven't worked with IMPORTED libs but this looks reasonable.
>
> Are you sure those .lib files are static libraries and not import
> libraries?

Yeah, they're static libraries, not imports.

>
> > 1: A dynamic library containing openssl which does not require me to
> > link in openssl if I want to use it to make an executable.
>
> AFAIK what you're doing ought to work. Maybe since this is Windows you
> need some symbol decoration magic (declspec)?

I'd really like to get a CMake solution instead of doing some nasty decoration magic, because I do need this to work on some unix-like systems as well.

>
> > 2: The dynamic library's internal openssl functions should not be
> > externally visible.
>
> Not sure if this is possible. If the symbols are in there, someone with
> dumpbin or some other tool will probably be able to find them. What are
> you trying to do? Why is this requirement important? Also, are there any
> legal/licensing ramifications of doing this?
>
> What problems are you running into? Can't compile dynlib? Can't link an
> exe with dynlib?

When I run the code, I get a dynamic library named dynlib out, and I can use it to link up an executable that uses the functions in there and it works fine, but I need to link in the openssl libraries as well. The executable doesn't link happily if it's not pointed to dynlib and the two static .lib openssl files.

I've checked the legal and licensing issues, and it's ok for this situation. What I'm trying to do is make sure the openssl that my library uses is not going to conflict with anyone else's openssl already installed on the system. I don't want someone to link my library, and then call an openssl function and get the openssl I'm using. That's just in case they have a different one.

Thanks!
-Michael


More information about the CMake mailing list