[CMake] Creating a DLL using .DEF file on MinGW

Ali Hamdi alha02 at gmail.com
Thu Sep 13 03:02:00 EDT 2012


That was it, it worked. Thank you!

/Ali

On Thu, Sep 13, 2012 at 8:48 AM, Petr Kmoch <petr.kmoch at gmail.com> wrote:
> Hi,
>
> just a wild guess: .def files for C++ projects have to list the mangled
> names, so if you want the export name to be just "testfunc", it should be
> declared as 'extern "C"'.
>
> Petr
>
> On Thu, Sep 13, 2012 at 8:17 AM, Ali Hamdi <alha02 at gmail.com> wrote:
>>
>> Hello everybody,
>>
>> I am trying to create a DLL by using a .DEF file and targeting the
>> MinGW gcc-compiler. In my CMakeLists.txt I have this:
>>
>> add_library(MyDll SHARED
>>                 MyDll.cpp
>>                 dllmain.cpp
>>                 stdafx.cpp
>>                 MyDll.def).
>>
>> I have the following sources:
>>
>> MyDll.def:
>>
>> LIBRARY libMyDll
>> EXPORTS testfunc
>>
>> stdafx.cpp:
>>
>> #include "stdafx.h"
>>
>> stdafx.h:
>>
>> #define WIN32_LEAN_AND_MEAN
>> #include <windows.h>
>>
>> dllmain.cpp:
>>
>> #include "stdafx.h"
>>
>> BOOL APIENTRY DllMain( HMODULE hModule,
>>                        DWORD  ul_reason_for_call,
>>                        LPVOID lpReserved
>>                                          )
>> {
>>         switch (ul_reason_for_call)
>>         {
>>         case DLL_PROCESS_ATTACH:
>>         case DLL_THREAD_ATTACH:
>>         case DLL_THREAD_DETACH:
>>         case DLL_PROCESS_DETACH:
>>                 break;
>>         }
>>         return TRUE;
>> }
>>
>> and finally
>>
>> MyDll.cpp:
>>
>> #include "stdafx.h"
>>
>> __declspec(dllexport) int __stdcall testfunc(int x )
>> {
>>         return 1;
>> }
>>
>>
>> If I do a regular cmake to create Visual Studio files, everything
>> compiles and links just fine (within VS Express 2010). But if I use
>> the CMAKE GUI and explicitly target MinGW, and then use make in the
>> cmd-prompt then I get the following error:
>>
>> Creating library file: libMyDll.dll.a
>> Cannot export testfunc: symbol not defined
>>
>>
>> Any idea of what I am doing wrong here? I would really appreciate some
>> help.
>> --
>>
>> 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