[CMake] Add_library shared or module: problem with mingw32

Gauthier Quesnel gauthier.quesnel at gmail.com
Mon Sep 15 09:02:48 EDT 2008


Hi all,

I watched the cmake scripts for Windows and Mingw32 compiler and I
found a problem (cmake 2.6.1).

In file CMake/Modules/Plateform/Windows-gcc.cmake line 14, a variable
is defined:
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")       # -shared

In line 37, to build a shared library, the script uses this variable.
But for Module, in line 32, a variable
CMAKE_SHARED_MODULE_CREATE_C_FLAGS is used but never defined
(CMAKE_SHARED_MODULE_C_FLAGS, CMAKE_SHARED_MODULE_CXX_FLAGS and
CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS too).

Is this the origin of my problem for the building of shared library MODULE ?

Regards,

Gauthier

2008/8/19 Gauthier Quesnel <gauthier.quesnel at gmail.com>:
> Hi all,
>
> I have a problem to compile plugin (loadable modules) on Windows with
> MinGW. When I build my plugin with add_library(myplugin SHARED ....),
> it works. I can open the plugin with the functions g_module_* [1]. The
> linking log:
>
> Linking CXX shared library libcsv.dll
>
> cd C:\DOCUME~1\homer\git\vle\build\src\vle\oov\plugins && "C:\Program Files\CMak
> e 2.6\bin\cmake.exe" -E cmake_link_script CMakeFiles\csv.dir\link.txt --verbose=
> 1
>
> C:\MinGW\bin\g++.exe    -shared -o libcsv.dll -Wl,--out-implib,libcsv.dll.a -Wl,
> --major-image-version,0,--minor-image-version,0 CMakeFiles\csv.dir\csv.obj -LC:\
> DOCUME~1\homer\git\vle\build\src\vle\oov -LC:\DOCUME~1\homer\git\vle\build\src\v
> le\vpz -LC:\DOCUME~1\homer\git\vle\build\src\vle\graph -LC:\DOCUME~1\homer\git\v
> le\build\src\vle\value -LC:\DOCUME~1\homer\git\vle\build\src\vle\data -LC:\DOCUM
> E~1\homer\git\vle\build\src\vle\utils -LC:\DOCUME~1\homer\git\vle\build\src\vle\
> geometry -LC:\Docume~1\homer\vle\lib ..\libvleoov.dll.a ..\..\vpz\libvlevpz.dll.
> a ..\..\graph\libvlegraph.dll.a ..\..\value\libvlevalue.dll.a ..\..\data\libvled
> ata.dll.a ..\..\utils\libvleutils.dll.a -lwsock32 -lnetapi32 -lz -lglibmm-2.4 -l
> gobject-2.0 -lsigc-2.0 -lglib-2.0 -lintl -liconv -lxml++-2.6 -lxml2 -lgthread-2.
> 0 -lglibmm-2.4 -lgobject-2.0 -lsigc-2.0 -lglib-2.0 -lintl -liconv -lxml++-2.6 -l
> xml2 -lgthread-2.0 ..\..\geometry\libvlegeometry.dll.a -lcairomm-1.0 -lcairo -lg
> lib-2.0 -lintl -liconv
>
> If I build my plugin with add_library(myplugin MODULE ...), it fails to
> link:
>
> Linking CXX shared module libcsv.dll
> cd C:\DOCUME~1\homer\git\vle\build\src\vle\oov\plugins && "C:\Program Files\CMak
> e 2.6\bin\cmake.exe" -E cmake_link_script CMakeFiles\csv.dir\link.txt --verbose=
> 1
> C:\MinGW\bin\g++.exe     -o libcsv.dll -Wl,--major-image-version,0,--minor-image
> -version,0 CMakeFiles\csv.dir\csv.obj -LC:\DOCUME~1\homer\git\vle\build\src\vle\
> oov -LC:\DOCUME~1\homer\git\vle\build\src\vle\vpz -LC:\DOCUME~1\homer\git\vle\bu
> ild\src\vle\graph -LC:\DOCUME~1\homer\git\vle\build\src\vle\value -LC:\DOCUME~1\
> homer\git\vle\build\src\vle\data -LC:\DOCUME~1\homer\git\vle\build\src\vle\utils
> -LC:\DOCUME~1\homer\git\vle\build\src\vle\geometry -LC:\Docume~1\homer\vle\lib
> ..\libvleoov.dll.a ..\..\vpz\libvlevpz.dll.a ..\..\graph\libvlegraph.dll.a ..\..
> \value\libvlevalue.dll.a ..\..\data\libvledata.dll.a ..\..\utils\libvleutils.dll
> .a -lwsock32 -lnetapi32 -lz -lglibmm-2.4 -lgobject-2.0 -lsigc-2.0 -lglib-2.0 -li
> ntl -liconv -lxml++-2.6 -lxml2 -lgthread-2.0 -lglibmm-2.4 -lgobject-2.0 -lsigc-2
> .0 -lglib-2.0 -lintl -liconv -lxml++-2.6 -lxml2 -lgthread-2.0 ..\..\geometry\lib
> vlegeometry.dll.a -lcairomm-1.0 -lcairo -lglib-2.0 -lintl -liconv
> /mingw/lib/libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `_W
> inMain at 16' collect2: ld returned 1 exit status
>
> To build a MacOS version, I need to use the add_library (... MODULE ...)
> function to create a correct plugin names MacOS (extension. So instead.
> Dylib).
>
> Have you any idea?
>
> [1] http://library.gnome.org/devel/glib/stable/glib-Dynamic-Loading-of-Modules.html
>


More information about the CMake mailing list