Компилируем dll с mingw и eclipse - PullRequest
       30

Компилируем dll с mingw и eclipse

3 голосов
/ 15 февраля 2012

Я хочу написать инструмент для захвата и визуализации нажатых клавиш в определенном приложении, поэтому я искал образец источника.

Мой результат был таким:

http://www.codeguru.com/cpp/w-p/system/keyboard/article.php/c5699

Но это пока не работает.Вот мой подход:

Я импортировал исходники как проект make-файла в Elipse (Helios, CDT Version 7.0.0.201006141710), используя Mingw 4.6.1 в качестве набора инструментов.

В keydll3.cpp я добавил строку

#define KEYDLL3_EXPORTS

, чтобы сообщить препроцессору, что я хочу экспортировать функции dll.

Теперь, когда я пытаюсь скомпилировать проектвозникают следующие ошибки:

    **** Internal Builder is used for build               ****
    g++ -shared -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -oStdAfx.o ..\StdAfx.cpp
    g++ -shared -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -okeydll3.o ..\keydll3.cpp
    ..\keydll3.cpp:31:0: warning: ignoring #pragma data_seg  [-Wunknown-pragmas]
    ..\keydll3.cpp:34:0: warning: ignoring #pragma data_seg  [-Wunknown-pragmas]
    ..\keydll3.cpp:36:0: warning: ignoring #pragma comment  [-Wunknown-pragmas]
    g++ -okeydll3 keydll3.o StdAfx.o
    c:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../libmingw32.a(main.o): In function `main':
    C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to `WinMain@16'
    collect2: ld returned 1 exit status
    Build error occurred, build is stopped

Кажется, что компилятор пропускает оператор winmain, потому что он предполагает, что это приложение для Windows.Но длл нет.Также кажется, что опция «-share» не имеет никакого эффекта.

Так как мне сказать компилятору, что мой код является dll с некоторыми вызовами Windows API?

Если есть другой пример, которыйработает без визуальной студии, дайте мне знать.

Заранее благодарим за ваш вклад.

Noir

1 Ответ

3 голосов
/ 16 февраля 2012

Вы добавили опцию -shared не в том месте.Его нужно добавлять к флагам компоновщика, а не к флагам компилятора.Ваши команды должны выглядеть следующим образом.

g++ -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -oStdAfx.o ..\StdAfx.cpp
g++ -DBUILDING_EXAMPLE_DLL -IC:\MinGW\include -IC:\MinGW\lib\gcc\mingw32\4.6.1\include\c++ -O2 -g -Wall -c -fmessage-length=0 -okeydll3.o ..\keydll3.cpp
g++ -shared -okeydll3 keydll3.o StdAfx.o
...