[CMake] Can't get CMake to use an import library generated from a MODULE target

Sam Habiel sam.habiel at gmail.com
Thu Feb 18 03:59:11 EST 2016


https://cmake.org/cmake/help/v3.0/command/add_library.html

The module library (libgtmshr) is dlopened from the main exe. It's not
supposed to be linked, except for Cygwin.

On Thursday, February 18, 2016, Mueller-Roemer, Johannes Sebastian <
Johannes.Sebastian.Mueller-Roemer at igd.fraunhofer.de> wrote:

> Why are you trying to link a MODULE? The add_library should be changed to
> SHARED not MODULE.
>
> --
> Johannes S. Mueller-Roemer, MSc
> Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)
>
> Fraunhofer-Institut für Graphische Datenverarbeitung IGD
> Fraunhoferstr. 5  |  64283 Darmstadt  |  Germany
> Tel +49 6151 155-606  |  Fax +49 6151 155-139
> johannes.mueller-roemer at igd.fraunhofer.de <javascript:;>  |
> www.igd.fraunhofer.de
>
>
> -----Original Message-----
> From: CMake [mailto:cmake-bounces at cmake.org <javascript:;>] On Behalf Of
> Sam Habiel
> Sent: Thursday, February 18, 2016 09:45
> To: cmake at cmake.org <javascript:;>
> Subject: [CMake] Can't get CMake to use an import library generated from a
> MODULE target
>
> Rather than email one of the folks at Kitware, I decided to join the CMake
> mailing list... Hello all for those who remember me.
>
> I apologize for the long email.
>
> A few of us have been trying to port GT.M
> (https://www.fisglobal.com/Solutions/Services/Database-Engine) to Cygwin,
> 1. to get it running on Windows 2. as an exercise to prepare for harder
> ports, the Raspberry Pi being the holy grail here. That's the background.
>
> The problem we are having is familiar to many; but not initially to me.
> See the heading "Shared libraries with Windows/MinGW" in this
> article:
> http://gernotklingler.com/blog/creating-using-shared-libraries-different-compilers-different-operating-systems/
> .
>
> CMakeLists.txt:
> https://github.com/shabiel/fis-gtm/blob/cygwin/CMakeLists.txt
>
> The error:
> [ 88%] Linking C shared module plugin/cyggtmcrypt_gcrypt_AES256CFB.dll
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/sr_unix/gtmcrypt_util.c.o:
> In function `gc_load_gtmshr_symbols':
> /home/sam/fis-gtm-cygwin/sr_unix/gtmcrypt_util.c:100: undefined reference
> to `gtm_malloc'
> /home/sam/fis-gtm-cygwin/sr_unix/gtmcrypt_util.c:101: undefined reference
> to `gtm_free'
> collect2: error: ld returned 1 exit status
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/build.make:202: recipe for
> target 'plugin/cyggtmcrypt_gcrypt_AES256CFB.dll' failed
> make[2]: *** [plugin/cyggtmcrypt_gcrypt_AES256CFB.dll] Error 1
> CMakeFiles/Makefile2:891: recipe for target
> 'CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/all' failed
> make[1]: *** [CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/all] Error 2
> Makefile:116: recipe for target 'all' failed
> make: *** [all] Error 2
>
> Here's the link command (I turned CMAKE_VERBOSE_MAKEFILE=ON):
> /usr/bin/cc   -march=i586 -fsigned-char -Wmissing-prototypes
> -Wreturn-type -Wpointer-sign -fno-omit-frame-pointer -g -DDEBUG -shared
> -Wl,--enable-auto-import -o plugin/cyggtmcrypt_gcrypt_AES256CFB.dll
> -Wl,--major-image-version,0,--minor-image-version,0
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/sr_unix/gtmcrypt_ref.c.o
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/sr_unix/gtmcrypt_pk_ref.c.o
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/sr_unix/gtmcrypt_dbk_ref.c.o
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/sr_unix/gtmcrypt_sym_ref.c.o
> CMakeFiles/libgtmcrypt_gcrypt_AES256CFB.so.dir/sr_unix/gtmcrypt_util.c.o
> -lgpg-error -lgpgme -lgcrypt /usr/local/lib/libconfig.dll.a
>
> What is missing is that there needs to be either a link to cyggtmshr.dll,
> or a way for CMake to know to generate a libgtmshr_import.lib and add it to
> the link command.
>
> So here is what I tried:
> 1. Using the GenerateExportHeader functionality of CMake on libgtmshr.
> If I do that, it doesn't seem to generate the import library; but it sure
> does generate an export header, which I don't need. Here it is:
> include(GenerateExportHeader)
> generate_export_header(libgtmshr
>     BASE_NAME libgtmshr
>     EXPORT_MACRO_NAME libgtmshr_EXPORTS
>     EXPORT_FILE_NAME  libgtmshr_EXPORTS.h
>     STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC)
>
> 2. Explicitly adding a libgtmshr as a dependency on line
> https://github.com/shabiel/fis-gtm/blob/cygwin/CMakeLists.txt#L531,
> but only for Cygwin. I get this error message:
> CMake Error at CMakeLists.txt:542 (target_link_libraries):
>   Target "libgtmshr" of type MODULE_LIBRARY may not be linked into another
>   target.  One may link only to STATIC or SHARED libraries, or to
> executables
>   with the ENABLE_EXPORTS property set.
>
> The GT.M developer familiar with CMake suggested me to use LINK_FLAGS and
> have CMake use the file by us hardcoding it in; which I am okay doing, but
> I thought I would check to see if there is an alternative way of doing this.
>
> I also tried the suggestions here:
> "
> https://blog.kitware.com/create-dlls-on-windows-without-declspec-using-new-cmake-export-all-feature/
> "
> to no avail.
>
> Last, but not least:
>
> sam at horus ~/fis-gtm-cygwin
> $ cmake --version
> cmake version 3.4.3
>
> CMake suite maintained and supported by Kitware (kitware.com/cmake).
>
> sam at horus ~/fis-gtm-cygwin
> $ uname -a
> CYGWIN_NT-10.0-WOW horus 2.2.0(0.289/5/3) 2015-08-03 12:49 i686 Cygwin
>
> --
> Sam Habiel, Pharm.D.
> VISTA Expertise Network
> --
>
> 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:
> http://public.kitware.com/mailman/listinfo/cmake
>


-- 
Sam Habiel, Pharm.D.
VISTA Expertise Network
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20160218/d0431752/attachment-0001.html>


More information about the CMake mailing list