Hello!
I am trying to compile DBD::InterBase with Firebird 1.5 for a 64bit
(AMD) running
Ubuntu 7.10 (desktop edition) by usage of CPAN (and then manually, look below).
And I got those errors:
cpan> force install DBD::InterBase
Running install for module DBD::InterBase
Running make for E/ED/EDPRATOMO/DBD-InterBase-0.48.tar.gz
Checksum for /root/.cpan/sources/authors/id/E/ED/EDPRATOMO/DBD-
InterBase-0.48.tar.gz ok
DBD-InterBase-0.48/
--cut--
Checking if your kit is complete...
Looks good
Using DBI 1.57 (for perl 5.008008 on x86_64-linux-gnu-thread-multi)
installed in /usr/lib/perl5/auto/DBI/
Writing Makefile for DBD::InterBase
/usr/bin/perl -p -e "s/~DRIVER~/InterBase/g" /usr/lib/perl5/auto/DBI/
Driver.xst > InterBase.xsi
cc -c -I"/opt/firebird/include" -I"/usr/lib/perl5/auto/DBI" -Wall -
fno-strict-aliasing -O2 -DVERSION=\"0.48\" -DXS_VERSION=\"0.48\" -
fPIC "-I/usr/lib/perl/5.8/CORE" dbdimp.c
cp lib/DBD/InterBase/TypeInfo.pm blib/lib/DBD/InterBase/TypeInfo.pm
cp InterBase.pm blib/lib/DBD/InterBase.pm
cp lib/DBD/InterBase/GetInfo.pm blib/lib/DBD/InterBase/GetInfo.pm
Running Mkbootstrap for DBD::InterBase ()
/usr/bin/perl /usr/share/perl/5.8/ExtUtils/xsubpp -noprototypes -
typemap /usr/share/perl/5.8/ExtUtils/typemap -typemap typemap
InterBase.xs > InterBase.xsc && mv InterBase.xsc InterBase.c
chmod 644 InterBase.bs
cp InterBase.bs blib/arch/auto/DBD/InterBase/InterBase.bs
chmod 644 blib/arch/auto/DBD/InterBase/InterBase.bs
cc -c -I"/opt/firebird/include" -I"/usr/lib/perl5/auto/DBI" -Wall -
fno-strict-aliasing -O2 -DVERSION=\"0.48\" -DXS_VERSION=\"0.48\" -
fPIC "-I/usr/lib/perl/5.8/CORE" InterBase.c
dbdimp.c: In function 'create_cursor_name':
dbdimp.c:60: warning: '0' flag ignored with precision and '%x' printf
format
dbdimp.c:60: warning: format '%016.16x' expects type 'unsigned int',
but argument 3 has type 'isc_stmt_handle'
dbdimp.c: In function 'ib_st_fetch':
dbdimp.c:1459: warning: format '%04d' expects type 'int', but argument
9 has type 'long int'
dbdimp.c:1474: warning: format '%04d' expects type 'int', but argument
6 has type 'long int'
dbdimp.c: In function 'ib_fill_isqlda':
dbdimp.c:2221: warning: format '%d' expects type 'int', but argument 3
has type 'STRLEN'
dbdimp.c:2221: warning: format '%d' expects type 'int', but argument 4
has type 'long unsigned int'
dbdimp.c:2275: warning: format '%d' expects type 'int', but argument 3
has type 'STRLEN'
dbdimp.c:2275: warning: format '%d' expects type 'int', but argument 4
has type 'long unsigned int'
rm -f blib/arch/auto/DBD/InterBase/InterBase.so
LD_RUN_PATH="/opt/firebird/lib" cc -shared -L/usr/local/lib
InterBase.o dbdimp.o -o blib/arch/auto/DBD/InterBase/
InterBase.so \
-L/opt/firebird/lib -lfbclient -ldl \
/usr/bin/ld: skipping incompatible /opt/firebird/lib/libfbclient.so
when searching for -lfbclient
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/
4.1.3/../../../../lib/libfbclient.so when searching for -lfbclient
/usr/bin/ld: skipping incompatible /usr/lib/../lib/libfbclient.so when
searching for -lfbclient
/usr/bin/ld: skipping incompatible /usr/bin/../lib/libfbclient.so when
searching for -lfbclient
/usr/bin/ld: skipping incompatible /usr/lib64/libfbclient.so when
searching for -lfbclient
/usr/bin/ld: skipping incompatible /usr/lib/libfbclient.so when
searching for -lfbclient
/usr/bin/ld: cannot find -lfbclient
collect2: ld returned 1 exit status
make: *** [blib/arch/auto/DBD/InterBase/InterBase.so] Error 1
/usr/bin/make -j3 -- NOT OK
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible
cpan>
--CUT--
As you see it complains about incompatible version of libfbclient (for 1.x).
I assumed this is about libfbclient not being able to link in 64 bit env. (?)
[..]
So I installed all 32bit, multilib related packages and manually tweaked
THIS:
--------
"LD_RUN_PATH="/opt/firebird/lib" cc -shared -L/usr/local/lib
InterBase.o dbdimp.o -o blib/arch/auto/DBD/InterBase/
InterBase.so -L/opt/firebird/lib -lfbclient -ldl"
INTO THAT:
-----------------
"LD_RUN_PATH="/opt/firebird/lib" ld -melf_i386 -shared
-L/usr/local/lib InterBase.o dbdimp.o -o
blib/arch/auto/DBD/InterBase/InterBase.so -L/opt/firebird/lib
-lfbclient"
--> So it did build and I installed it, however running `a script'
fails to load the shared lib:
[EMAIL PROTECTED]:/home/ZEN-NET-DB# perl groups-list.pl
install_driver(InterBase) failed: Can't load
'/usr/local/lib/perl/5.8.8/auto/DBD/InterBase/InterBase.so' for module
DBD::InterBase:
/usr/local/lib/perl/5.8.8/auto/DBD/InterBase/InterBase.so: wrong ELF
class: ELFCLASS32 at /usr/lib/perl/5.8/DynaLoader.pm line 225.
at (eval 3) line 3
Compilation failed in require at (eval 3) line 3.
Perhaps a required shared library or dll isn't installed where expected
at groups-list.pl line 5
--> InterBase.so is built against 32-bit libs:
[EMAIL PROTECTED]:/home/ZEN-NET-DB# ldd
/usr/local/lib/perl/5.8.8/auto/DBD/InterBase/InterBase.so
linux-gate.so.1 => (0xffffe000)
libfbclient.so.1 => /opt/firebird/lib/libfbclient.so.1 (0xf7e91000)
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0xf7dc6000)
libncurses.so.5 => /lib32/libncurses.so.5 (0xf7d82000)
libcrypt.so.1 => /lib32/libcrypt.so.1 (0xf7d54000)
libm.so.6 => /lib32/libm.so.6 (0xf7d2f000)
libc.so.6 => /lib32/libc.so.6 (0xf7be5000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7be1000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7bc9000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7bbd000)
/lib/ld-linux.so.2 (0x56555000)
--> BUT DBI.so is built againts 64-bit libs:
[EMAIL PROTECTED]:/home/ZEN-NET-DB# ldd
/usr/local/lib/perl/5.8.8/auto/DBI/DBI.so
libc.so.6 => /lib/libc.so.6 (0x00002b71f3e6c000)
/lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
My question is: if I build DBI against 32-bit libs will it then work
all together with my the default perl distro in Ubuntu or do I have to
rebuild it also? How to pass `-m32' and `ld -melf_i386' to respective
sections of CPAN built Makefiles? How deep should I dig into
rebuilding wit/for 32 bit?
Is my way of tackling with this problem a sane one? If not: what am I
doing wrong?
TIA,
Cheers,
Pawel
--
Registered Linux user #145057 running @ ARM / MIPS / PowerPC / x86 / x86_64
main(){printf("%c%c%c%c%c%c%d%c",0x68,0x61,0x78,0x6f,0x72,0x10,0x539,0x0a);}