[CMake] Problem building libraries with no sources with Visual Studio 9 (2008)
Michael Jackson
mike.jackson at bluequartz.net
Tue Dec 21 10:21:46 EST 2010
You will want to read this article:
http://www.cmake.org/Wiki/BuildingWinDLL
___________________________________________________________
Mike Jackson www.bluequartz.net
Principal Software Engineer mike.jackson at bluequartz.net
BlueQuartz Software Dayton, Ohio
On Dec 21, 2010, at 10:13 AM, Pere Mato Vila wrote:
> Dear all,
>
> I am trying to build shared libraries on Windows exporting all
> symbols. This is as an alternative of instrumenting the code with
> dllimport/dllexport declarations. For this I do build first a static
> library from which I get all the defined symbols to write a .DEF
> file which is then used to build the shared library. The CMake code
> (using version 2.8.3) looks like this:
>
> add_library( ${library}-static STATIC ${sources} )
> add_custom_command( OUTPUT {library}.def COMMAND <using ${library}-
> static> DEPENDS ${library}-static )
> add_library(${library} SHARED ${library}.def)
> target_link_libraries(${library} ${library}-static ${other-libs} )
> set_target_properties(${library} PROPERTIES LINK_INTERFACE_LIBRARIES
> ${other-libs})
>
> This works just fine when using the nmake generator. The library
> is created and has all the symbols are exported as desired. But,
> when using Visual C++ 2008 express edition I get the following error
> message:
>
> 1>.\mylib.dir\Debug\mylib.dll.intermediate.manifest : general error
> c1010070: Failed to load and parse the manifest. The system cannot
> find the file specified.
>
> The problem is that the shared library has been defined without any
> 'real' source file (only the .def file is declared) and somehow the
> generated code does not produce the required manifest file. Does
> anybody see a problem with these kind of constructs? Should it just
> work from within the IDE?
> Experimentally I have found a workaround, which consists in adding
> a dummy source file in the shared library definition.
>
> ...
> file( WRITE ${library}.cpp "// empty file!!!\n" )
> add_library( ${library} SHARED ${library}.cpp ${library}.def)
> ...
>
>
> I have also noticed that the dependency of the shared library to
> the .def file is also missing. This is, newer versions of the .def
> file does not trigger a re-build of the shared library.
>
> -------------------------------------------------------------
> Pere Mato CERN, PH Department, CH 1211 Geneva 23, Switzerland
> e-mail: pere.mato at cern.ch tel: +41 22 76 78696
> fax: +41 22 76 68792 gsm: +41 76 48 70855
>
>
> _______________________________________________
> 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
More information about the CMake
mailing list