Форум » [x]Harbour » -shared/static mode » Ответить

-shared/static mode

Zakrzevky: Сначала был clipper и было так.. Пишешь свою функцию,метод (например переписал getsys.prg, Tbrowse.prg). После сборки моя функция,метод из .prg "перебивает" аналогичные функции,и методы c такими же именами как в собственных прилинкованных lib так и в системных. Так же было и в hb2.1 пока решился из вызываемой внешней еxе( которая была еще на клиппер) сделать динамическую dll. Сделал. - работает и вызывается. При сборке основного модуля добавил в hbmk2 .... -shared. Теперь методы Tbrowse вызываются не мои а харборовские При одинаковых именах функций вызываются из прилинкованной lib а не рожденных из моих исходников(вставлял wait, менял имена ). Убираю -shared - все с точностью до наоборот ,но не работает dll. Где грабли на которые я наступил? Не пересобирать же сам наrbour, может есть какие- либо дополнительные декларации или ключи.

Ответов - 4

Pasha: У меня тоже была когда-то такая проблема Только немного по другому - я свой модуль getsys включаю в другую dll Сделал все средствами препроцессора, с помощью таких команд: #define ReadModal _ReadModal #define GetReader _GetReader #define ReadUpdated _ReadUpdated #define ReadKill _ReadKill #define RangeCheck _RangeCheck #define __KillRead ___KillRead #define GetActive _GetActive #define GetApplyKey _GetApplyKey #define GetDoSetKey _GetDoSetKey #define GetPreValidate _GetPreValidate #define GetPostValidate _GetPostValidate Эти команды включаю и в свой getsys, и в программы При этом вызываются не харборовские функции, а мои Идея, думаю, понятна, и ее можно применить и к tbrowse

Zakrzevky: Спасибо Павел! Похоже оправдались мои худшие опасения на этот счет, уже было начал переименовывать некоторые функции, но конечно более эффектно это сделать средствами препроцессора. Впредь буду знать, что нельзя так бесшабашно поступать при подмене совпадающих по именам функций своими. Следует наверно тщательнее проверять такие ситуации и не надеятся что дескать "наши победят". Буду пробовать.... и вопрос в догонку. В данном режиме пришлось отказаться также от debugger убрав -B из -PRGFLAG= . В этом случае выдаются неразрешимые ссылки, которые мне не удалось устранить . Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_MY_PROC' referenced from C:\DOCUMENTS AND SETTINGS\VITALY\LOCAL SETTINGS\TEMP\HBMK_6EB7CB.DIR\MAINCODE.OBJ Error: Unresolved external '_hb_stackDebugInfo' referenced from C:\HB21\LIB\WIN\BCC\HBDEBUG.LIB|dbgentry Error: Unresolved external '_hb_macroGetType' referenced from C:\HB21\LIB\WIN\BCC\HBDEBUG.LIB|dbgentry Error: Unresolved external '_hb_macroGetValue' referenced from C:\HB21\LIB\WIN\BCC\HBDEBUG.LIB|dbgentry Error: Unresolved external '_hb_memvarGetValueBySym' referenced from C:\HB21\LIB\WIN\BCC\HBDEBUG.LIB|dbgentry Ничего страшного нет, но с отладчиком было приятнее.

Pasha: My_Proc - это не харборовская функция, ищите ее в своих сырцах А остальное - по-видимому, какой-то модуль скомпилирован с флагом -B, он и дает нереализованные ссылки


Zakrzevky: Pasha пишет: My_Proc - это не харборовская функция, ищите ее в своих сырцах это действительно отладочная . Ee убрал. Остальные нереализованные ссылки остаются если с флагом -B,а если без него то все Ok. Я наверно неправильно поставил вопрос. В таком режиме (-shared/static) надо отключать -В. А для отладки допустим головного модуля (а не Dll) устанавливать -в и убирать -share, затем запускать - ALT_D и далее как обычно отлаживаем текст. Насколько я правильно понял.



полная версия страницы