http://www.perlmonks.org?node_id=988230


in reply to Re^8: Problem Installing DBD::Informix on Windows 7 using AS Perl 5.8.9
in thread Problem Installing DBD::Informix on Windows 7 using AS Perl 5.8.9

The output of perl -V:archname is archname='MSWin32-x86-multi-thread'; so $NTConfiguration is set to true. I deleted $opt{LD} right before WriteMakefile. When I re-ran perl Makefile.PL and nmake I got the following linker errors:

link -out:blib\arch\auto\DBD\Informix\Informix.dll -dll -nologo -nodef +aultlib -debug -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x8 +6 Informix.obj dbdimp.obj dbdattr.obj sqltoken.obj sqltype.obj ixblob +.obj odbctype.obj kludge.obj link.obj esqlcver.obj esqlc_v6.obj /LIBP +ATH:C:\PROGRA~2\IBM\Informix\11.70/lib /LIBPATH:C:\PROGRA~2\IBM\Infor +mix\11.70/lib/esql "C:/PROGRA~2/IBM/Informix/11.70\lib\isqlt09a +.lib" "C:/PROGRA~2/IBM/Informix/11.70\lib\igl4n304.lib" "C:/PROGRA~2/ +IBM/Informix/11.70\lib\iglxn304.lib" "C:/PROGRA~2/IBM/Informix/11.70\ +lib\igo4n304.lib" netapi32.lib wsock32.lib user32.lib winmm.lib advap +i32.lib C:\Perl\lib\CORE\perl58.lib oldnames.lib kernel32.lib user32 +.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ol +e32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm. +lib version.lib odbc32.lib odbccp32.lib msvcrt.lib -def:Informix.def Informix.def : error LNK2001: unresolved external symbol ifx_checkAPI Informix.def : error LNK2001: unresolved external symbol ifx_checkAPI blib\arch\auto\DBD\Informix\Informix.lib : fatal error LNK1120: 2 unre +solved externals NMAKE : fatal error U1077: '"c:\Program Files (x86)\Microsoft Visual S +tudio 10.0\VC\BIN\link.EXE"' : return code '0x460' Stop.

I checked Informix.def and its contents are:

LIBRARY "Informix" EXPORTS ifx_checkAPI _ifx_checkAPI = ifx_checkAPI boot_DBD__Informix _boot_DBD__Informix = boot_DBD__Informix

I have no idea what this file and its contents are supposed to do. You're right. This is a mess. I would like to clean it up but writing a new Makefile.PL is beyond my expertise. All I want to do is install the module and get on with my work.

"Its not how hard you work, its how much you get done."

Replies are listed 'Best First'.
Re^10: Problem Installing DBD::Informix on Windows 7 using AS Perl 5.8.9
by bulk88 (Priest) on Aug 18, 2012 at 18:31 UTC
    I am writing generically here. https://bugs.php.net/bug.php?id=3386. Do a grep on the folder with the library included .lib/.a/.o/.obj/etc, or do a start-search-files, inside files, inside subfolders, (plus you probably need some registry editing to add (I did) those file extensions to windows search, see http://support.microsoft.com/kb/309173). You are going to have to find where ifx_checkAPI lives. Some googling leaks to this, http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.esqlc.doc/sii-13-10773.htm. The other more experimental choice is get ifx_checkAPI out of your XS module, I dont know why it needs to be exported from the XS module (and I dont know your XS module either). http://msdn.microsoft.com/en-us/library/756as972.aspx Dumpbin is a very useful tool. It works on .obj/.o and .a/lib and on .exe/.dll files. Not all the files have all classes of info, a .obj/.o exports and imports nothing for example, but it does have plenty of symbols which some people say are "exported" since they are public and not static/private symbols and you can link with them from oter compliands. Another tool to try is StudPE. It works on exe and dlls, not sure if it will open a .obj/.lib.