in reply to Re: Re4: DBD::Sybase with Sybase 15.0
in thread DBD::Sybase with Sybase 15.0
Hi,
I followed the articles at:
http://mingw.org/mingwfaq.shtml#faq-msvcdll
http://sapdb.2scale.net/maxdb-wiki/MS_C++_Toolkit
http://www.geocities.com/yongweiwu/stdcall.htm
And created my own libraries out of %sybase%\dll\*
Step1: Create the following sed file, call it exp.sed
/ \t*ordinal hint/,/^ \t*Summary/{
/^ \t\+0-9\+/{
s/^ \t\+0-9\+ \t\+0-9A-Fa-f\+ \t\+0-9A-Fa-f\+ \t\+\(.*\)/\1/p
}
}
Step2: Create following batch file, call it genlib.bat
echo LIBRARY %1.dll > %1.def
echo EXPORTS >> %1.def
link -dump -exports %1.dll | sed -nf c:\temp\DBD-Sybase-1.08\exports.sed >> %1.def
dlltool -U -d %1.def -l %1.a
Step3: go to %sybase%\dll and run the following loop (type it on dos prompt and press enter)
for /f %i in ('dir /b *.dll') do a %~ni & move /Y %~ni.a ..\lib\ & del %~ni.def
Step4:
Go to DBD-Sybase-1.08 directory, edit makefile.pl, change libct to libsybct.a etc .. and run nmake it compiles and links correctly, but all the tests fail!!!
--------------------------------------------------------
ERROR:
# Tried to use 'DBD::Sybase'.
# Error: Can't load 'C:\temp\DBD-Sybase-1.08\blib\arch/auto/DBD/Sybase/Sybase.dll' for module DBD::Sybase: load_file:The specified procedure could not be found at C:/Perl/lib/DynaLoader.pm line 201.
--------------------------------------------------------
So I tried again to debug:
Went to "DBD-Sybase-1.08\blib\arch\auto\DBD\Sybase"
and issued "link -dump -exports Sybase.dll"
The following dump clearly shows there aren't any methods exported. It seems the __declspec(export) is not evaluated by some preprocessor macro during compilation.
Michael could you please help me, here?
Thanks,
Sanjit
It took me some seven days to compile and successfully link DBI::Sybase1.08 against Sybase OCS15 on Mingw / Windows Vista. I would surely share my trick, it is really difficult to link sybase libraries using Mingw. If I link on VC8, it is linked to msvcr80.dll. It fails to load because of windows side by side dll installation.
So I tried to link using free Mingw, it links with msvcrt.dll. Downloaded mingw, binutils, unix utils (unixutils.sourceforge.net) and nmake from VC8\bin.
I followed the articles at:
http://mingw.org/mingwfaq.shtml#faq-msvcdll
http://sapdb.2scale.net/maxdb-wiki/MS_C++_Toolkit
http://www.geocities.com/yongweiwu/stdcall.htm
And created my own libraries out of %sybase%\dll\*
Step1: Create the following sed file, call it exp.sed
/ \t*ordinal hint/,/^ \t*Summary/{
/^ \t\+0-9\+/{
s/^ \t\+0-9\+ \t\+0-9A-Fa-f\+ \t\+0-9A-Fa-f\+ \t\+\(.*\)/\1/p
}
}
Step2: Create following batch file, call it genlib.bat
echo LIBRARY %1.dll > %1.def
echo EXPORTS >> %1.def
link -dump -exports %1.dll | sed -nf c:\temp\DBD-Sybase-1.08\exports.sed >> %1.def
dlltool -U -d %1.def -l %1.a
Step3: go to %sybase%\dll and run the following loop (type it on dos prompt and press enter)
for /f %i in ('dir /b *.dll') do a %~ni & move /Y %~ni.a ..\lib\ & del %~ni.def
Step4:
Go to DBD-Sybase-1.08 directory, edit makefile.pl, change libct to libsybct.a etc .. and run nmake it compiles and links correctly, but all the tests fail!!!
--------------------------------------------------------
ERROR:
# Tried to use 'DBD::Sybase'.
# Error: Can't load 'C:\temp\DBD-Sybase-1.08\blib\arch/auto/DBD/Sybase/Sybase.dll' for module DBD::Sybase: load_file:The specified procedure could not be found at C:/Perl/lib/DynaLoader.pm line 201.
--------------------------------------------------------
So I tried again to debug:
Went to "DBD-Sybase-1.08\blib\arch\auto\DBD\Sybase"
and issued "link -dump -exports Sybase.dll"
The following dump clearly shows there aren't any methods exported. It seems the __declspec(export) is not evaluated by some preprocessor macro during compilation.
Dump of file Sybase.dll File Type: DLL Section contains the following exports for dll.exp.dll 00000000 characteristics 47FAA9E4 time date stamp Tue Apr 08 00:10:28 2008 0.00 version 1 ordinal base 2 number of functions 2 number of names ordinal hint RVA name 2 0 00006130 _boot_DBD__Sybase 1 1 00006130 boot_DBD__Sybase Summary 1000 .bss 1000 .data 1000 .edata 2000 .idata 5000 .rdata 1000 .reloc 16000 .text
Michael could you please help me, here?
Thanks,
Sanjit
In Section
Seekers of Perl Wisdom