как собрать плагины с помощью gcc из mingw?

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
Jet Bird
Posts: 3
Joined: Sat 27 Jan, 2007 14:50

Компиляция под MinGW

Post by Jet Bird »

Подскажите, пожалуйста, как скопмилировать какой-нибудь пример, используя MinGW.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

См. %FARHOME%\PluginSDK\GCCReadme.txt и %FARHOME%\PluginSDK\Examples\
Jet Bird
Posts: 3
Joined: Sat 27 Jan, 2007 14:50

Post by Jet Bird »

Я читал. Но вот, допустим, берем такой плагин.

[HaRT] Длинный специфичный текст перенесён в приложение. В следующий раз будет просто удалён.

.def к нему выглядит так:

Code: Select all

LIBRARY
EXPORTS
   GetPluginInfo=GetPluginInfo@4
   OpenPlugin=OpenPlugin@8
   SetStartupInfo=SetStartupInfo@4
Почему-то функция OpenPlugin не вызвается, а две другие работают. :-(
Attachments
HelloWorld_FromMinGW.7z
Программный код, вырезанный из текста сообщения
(914 Bytes) Downloaded 344 times
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Post by DrKnS »

Собрал, работает.
А точно там где надо смотришь? (с Info->Flags=PF_EDITOR|PF_DISABLEPANELS плагин будет доступен только из меню редактора.)
Jet Bird
Posts: 3
Joined: Sat 27 Jan, 2007 14:50

Post by Jet Bird »

Ух ты, здорово!
В редакторе работает!
:)
Спасибо!!!
karlson
Posts: 40
Joined: Sat 03 Jun, 2006 17:31

Post by karlson »

Иногда помогает указать FAR в объявлении функции.
User avatar
burning shadow
Posts: 61
Joined: Tue 13 May, 2008 13:55
Location: St.Petersburg, Russia
Contact:

как собрать плагины с помощью gcc из mingw?

Post by burning shadow »

Попробовал собрать плагины, только что слитые из SVN с помощью MinGW/GCC, ругается:

Code: Select all

$ make -f makefile_all_gcc 
===========CRT library
make[1]: Entering directory `/d/prog/c/work/far/plugins/common/CRT'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/d/prog/c/work/far/plugins/common/CRT'
===========align
make[1]: Entering directory `/d/prog/c/work/far/plugins/align'
compiling Align.rc
d:\prog\c\mingw\bin\windres.exe: Align.rc:8: syntax error
make[1]: *** [final.32.gcc/obj/Align.res.o] Error 1
make[1]: Leaving directory `/d/prog/c/work/far/plugins/align'
make: *** [align] Error 2
Сам, увы, разобраться не смог..
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: как собрать плагины с помощью gcc из mingw?

Post by zg »

burning shadow wrote:Сам, увы, разобраться не смог..
нужен наипоследнейший binutils. там баг в windres исправили.
User avatar
burning shadow
Posts: 61
Joined: Tue 13 May, 2008 13:55
Location: St.Petersburg, Russia
Contact:

Re: как собрать плагины с помощью gcc из mingw?

Post by burning shadow »

Опаньки. Спасибо. :)
black alpinist
Posts: 20
Joined: Fri 13 Apr, 2007 09:22

Re: как собрать плагины с помощью gcc из mingw?

Post by black alpinist »

Может у кого-то завалялись gcc-шниые make файлы для ftp/lib? Там есть для vc, но я пока не умею переделывать :oops:
black alpinist
Posts: 20
Joined: Fri 13 Apr, 2007 09:22

Re: Компиляция под MinGW

Post by black alpinist »

в PluginsSDK/VCReadme.txt относительно .def файлов написано
There is no need to declare your names like ClosePlugin=_ClosePlugin@4
because linker does it automatically.
Относится ли это и к gcc ?
black alpinist
Posts: 20
Joined: Fri 13 Apr, 2007 09:22

Re: Компиляция под MinGW

Post by black alpinist »

Хе, опытным путем (подстановкой vc def файла вместо gcc) установлено что относится. По крайней мере циферки совпадают :)
Продолжим эксперимент...
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: Компиляция под MinGW

Post by zg »

black alpinist wrote:По крайней мере циферки совпадают :)
«циферки» как вы изволили выразится, это манглинг. и конкретно означают размер параметров функции.
black alpinist
Posts: 20
Joined: Fri 13 Apr, 2007 09:22

Re: Компиляция под MinGW

Post by black alpinist »

Нарвался на следующую проблему - при линковке с ключом -nodefaultlibs вылазит куча месаг типа

Code: Select all

c:/mingw/bin/../lib/gcc/mingw32/4.3.0/../../../../mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMain@12; defaulting to 6cbc1000
./final.32.gcc/obj/Notify/nt_Main.o:nt_Main.cpp:(.text+0x32): undefined reference to `_fclose'
./final.32.gcc/obj/Notify/nt_Main.o:nt_Main.cpp:(.text+0xa9): undefined reference to `_fopen'
./final.32.gcc/obj/Notify/nt_Main.o:nt_Main.cpp:(.text+0xc2): undefined reference to `_fopen'
./final.32.gcc/obj/Notify/nt_Main.o:nt_Main.cpp:(.text+0x14f): undefined reference to `_fprintf'
./final.32.gcc/obj/Notify/nt_Main.o:nt_Main.cpp:(.text+0x1a5): undefined reference to `_fprintf'
./final.32.gcc/obj/Notify/nt_Main.o:nt_Main.cpp:(.text+0x1b6): undefined reference to `_fflush'
Без него все нормально. Что не проинклюдилось? Вот линковочная команда:

Code: Select all

mingw32-g++ -e _DllMain@12 -o ftpNotify.fll -Xlinker --base-file -Xlinker ftpNotify.fll.base ./final.32.gcc/obj/Notify/p_All.o ./final.32.gcc/obj/Notify/nt_Main.o ./final.32.gcc/obj/Notify/ftpNotify.res.o -mno-cygwin -mdll -s -nostartfiles -nodefaultlibs -lgcc -L ../common -lCRT -luser32 -lkernel32 -ladvapi32 -lshell32 -lwsock32 -lwinmm
User avatar
t-rex
Страшный и ужасный
Posts: 4910
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 8 times
Contact:

Re: Компиляция под MinGW

Post by t-rex »

black alpinist
для фунций из libc в mingw нужно линковать с msvcrt
Post Reply

Return to “Разработка плагинов”