isync has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks!

Today I tried installing Bloom::Faster on my 64 bit Ubuntu 6.06 system, which failed. A test on a box running 32bit was successful.

So far I have figured out that the problem is with my compiler or the underlying leopold library libbloom.so - but I am not such a compiling expert to track down what's wrong.
Here is the output:

Checking if your kit is complete... Looks good Writing Makefile for Bloom::Faster cp lib/Bloom/Faster.pm blib/lib/Bloom/Faster.pm AutoSplitting blib/lib/Bloom/Faster.pm (blib/lib/auto/Bloom/Faster) # something strange happens to this Makefile.in file # when I run "make dist" from the perl installation. I need # to replace it with the right file from the c build tar -xvzf leopold-1.0.tar.gz leopold-1.0/ leopold-1.0/README leopold-1.0/stamp-h.in leopold-1.0/AUTHORS leopold-1.0/COPYING leopold-1.0/ChangeLog leopold-1.0/INSTALL leopold-1.0/Makefile.am leopold-1.0/Makefile.in leopold-1.0/NEWS leopold-1.0/aclocal.m4 leopold-1.0/config.guess leopold-1.0/config.h.in leopold-1.0/config.sub leopold-1.0/configure leopold-1.0/configure.in leopold-1.0/install-sh leopold-1.0/ltmain.sh leopold-1.0/missing leopold-1.0/mkinstalldirs leopold-1.0/man/ leopold-1.0/man/.svn/ leopold-1.0/man/.svn/props/ leopold-1.0/man/.svn/props/bloom_suggestion.3.svn-work leopold-1.0/man/.svn/props/libbloom.3.svn-work leopold-1.0/man/.svn/props/bloom_add.3.svn-work leopold-1.0/man/.svn/props/Makefile.in.svn-work leopold-1.0/man/.svn/props/bloom_check.3.svn-work leopold-1.0/man/.svn/props/Makefile.am.svn-work leopold-1.0/man/.svn/props/bloom_init.3.svn-work leopold-1.0/man/.svn/text-base/ leopold-1.0/man/.svn/text-base/bloom_check.3.svn-base leopold-1.0/man/.svn/text-base/Makefile.am.svn-base leopold-1.0/man/.svn/text-base/Makefile.in.svn-base leopold-1.0/man/.svn/text-base/bloom_add.3.svn-base leopold-1.0/man/.svn/text-base/bloom_suggestion.3.svn-base leopold-1.0/man/.svn/text-base/bloom_init.3.svn-base leopold-1.0/man/.svn/text-base/libbloom.3.svn-base leopold-1.0/man/.svn/prop-base/ leopold-1.0/man/.svn/prop-base/bloom_suggestion.3.svn-base leopold-1.0/man/.svn/prop-base/libbloom.3.svn-base leopold-1.0/man/.svn/prop-base/bloom_add.3.svn-base leopold-1.0/man/.svn/prop-base/Makefile.in.svn-base leopold-1.0/man/.svn/prop-base/bloom_check.3.svn-base leopold-1.0/man/.svn/prop-base/Makefile.am.svn-base leopold-1.0/man/.svn/prop-base/bloom_init.3.svn-base leopold-1.0/man/.svn/wcprops/ leopold-1.0/man/.svn/tmp/ leopold-1.0/man/.svn/tmp/text-base/ leopold-1.0/man/.svn/tmp/prop-base/ leopold-1.0/man/.svn/tmp/props/ leopold-1.0/man/.svn/tmp/wcprops/ leopold-1.0/man/.svn/empty-file leopold-1.0/man/.svn/entries leopold-1.0/man/.svn/README.txt leopold-1.0/man/.svn/format leopold-1.0/man/Makefile leopold-1.0/man/bloom_suggestion.3 leopold-1.0/man/libbloom.3 leopold-1.0/man/bloom_add.3 leopold-1.0/man/Makefile.in leopold-1.0/man/bloom_check.3 leopold-1.0/man/Makefile.am leopold-1.0/man/bloom_init.3 leopold-1.0/src/ leopold-1.0/src/Makefile.am leopold-1.0/src/Makefile.in leopold-1.0/src/bloom.h leopold-1.0/src/hashes.h leopold-1.0/src/bloom.c leopold-1.0/src/jenkins.c leopold-1.0/src/suggestions.c leopold-1.0/src/main.c leopold-1.0/src/longtest.c cp leopold-1.0/src/Makefile.in leopold/src/Makefile.in cd leopold && ./configure && make checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking whether make sets $(MAKE)... yes checking for working aclocal-1.4... missing checking for working autoconf... missing checking for working automake-1.4... missing checking for working autoheader... missing checking for working makeinfo... missing checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking for a sed that does not truncate output... /bin/sed checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for /usr/bin/ld option to reload object files... -r checking for BSD-compatible nm... /usr/bin/nm -B checking whether ln -s works... yes checking how to recognise dependent libraries... pass_all checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking dlfcn.h usability... yes checking dlfcn.h presence... yes checking for dlfcn.h... yes checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking how to run the C++ preprocessor... g++ -E checking for g77... no checking for f77... no checking for xlf... no checking for frt... no checking for pgf77... no checking for cf77... no checking for fort77... no checking for fl32... no checking for af77... no checking for f90... no checking for xlf90... no checking for pgf90... no checking for pghpf... no checking for epcf90... no checking for gfortran... no checking for g95... no checking for f95... no checking for fort... no checking for xlf95... no checking for ifort... no checking for ifc... no checking for efc... no checking for pgf95... no checking for lf95... no checking for ftn... no checking whether we are using the GNU Fortran 77 compiler... no checking whether accepts -g... no checking the maximum length of command line arguments... 32768 checking command to parse /usr/bin/nm -B output from gcc object... ok checking for objdir... .libs checking for ar... ar checking for ranlib... ranlib checking for strip... strip checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC checking if gcc PIC flag -fPIC works... yes checking if gcc static flag -static works... yes checking if gcc supports -c -o file.o... yes checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports s +hared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes configure: creating libtool appending configuration tag "CXX" to libtool checking for ld used by g++... /usr/bin/ld -m elf_x86_64 checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports s +hared libraries... yes checking for g++ option to produce PIC... -fPIC checking if g++ PIC flag -fPIC works... yes checking if g++ static flag -static works... yes checking if g++ supports -c -o file.o... yes checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports s +hared libraries... yes checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate appending configuration tag "F77" to libtool checking for ANSI C header files... (cached) yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking math.h usability... yes checking math.h presence... yes checking for math.h... yes checking for stdlib.h... (cached) yes checking for GNU libc compatible malloc... yes checking for pow... no checking for strdup... yes checking for sqrtl... no configure: creating ./config.status config.status: creating Makefile config.status: WARNING: Makefile.in seems to ignore the --datarootdir + setting config.status: creating src/Makefile config.status: WARNING: src/Makefile.in seems to ignore the --dataroo +tdir setting config.status: creating man/Makefile config.status: WARNING: man/Makefile.in seems to ignore the --dataroo +tdir setting config.status: creating config.h config.status: executing default-1 commands make[1]: Betrete Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1.4 +-B3cOL3/leopold' make all-recursive make[2]: Betrete Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1.4 +-B3cOL3/leopold' Making all in src make[3]: Betrete Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1.4 +-B3cOL3/leopold/src' /bin/sh ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.. + -g -O2 -c bloom.c mkdir .libs gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c bloom.c -fPIC -DPIC -o .l +ibs/bloom.o gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c bloom.c -o bloom.o >/dev/n +ull 2>&1 /bin/sh ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.. + -g -O2 -c jenkins.c gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c jenkins.c -fPIC -DPIC -o +.libs/jenkins.o jenkins.c: In function 'hash5': jenkins.c:130: warning: incompatible implicit declaration of built-in +function 'strlen' gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c jenkins.c -o jenkins.o >/d +ev/null 2>&1 /bin/sh ../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.. + -g -O2 -c suggestions.c gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c suggestions.c -fPIC -DPIC + -o .libs/suggestions.o gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c suggestions.c -o suggestio +ns.o >/dev/null 2>&1 /bin/sh ../libtool --mode=link gcc -g -O2 -o libbloom.la -rpath /usr +/local/lib -lm bloom.lo jenkins.lo suggestions.lo gcc -shared .libs/bloom.o .libs/jenkins.o .libs/suggestions.o -lm - +Wl,-soname -Wl,libbloom.so.0 -o .libs/libbloom.so.0.0.0 (cd .libs && rm -f libbloom.so.0 && ln -s libbloom.so.0.0.0 libbloom.s +o.0) (cd .libs && rm -f libbloom.so && ln -s libbloom.so.0.0.0 libbloom.so) ar cru .libs/libbloom.a bloom.o jenkins.o suggestions.o ranlib .libs/libbloom.a creating libbloom.la (cd .libs && rm -f libbloom.la && ln -s ../libbloom.la libbloom.la) gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c main.c /bin/sh ../libtool --mode=link gcc -g -O2 -o bloom -lbloom main.o gcc -g -O2 -o .libs/bloom main.o /home/isync/.cpan/build/Bloom-Faster +-1.4-B3cOL3/leopold/src/.libs/libbloom.so -lm creating bloom gcc -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -c longtest.c /bin/sh ../libtool --mode=link gcc -g -O2 -o bloom_longtest -lbloom +longtest.o gcc -g -O2 -o .libs/bloom_longtest longtest.o /home/isync/.cpan/build +/Bloom-Faster-1.4-B3cOL3/leopold/src/.libs/libbloom.so -lm creating bloom_longtest make[3]: Verlasse Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1. +4-B3cOL3/leopold/src' Making all in man make[3]: Betrete Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1.4 +-B3cOL3/leopold/man' make[3]: Für das Ziel »all« ist nichts zu tun. make[3]: Verlasse Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1. +4-B3cOL3/leopold/man' make[3]: Betrete Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1.4 +-B3cOL3/leopold' make[3]: Für das Ziel »all-am« ist nichts zu tun. make[3]: Verlasse Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1. +4-B3cOL3/leopold' make[2]: Verlasse Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1. +4-B3cOL3/leopold' make[1]: Verlasse Verzeichnis '/home/isync/.cpan/build/Bloom-Faster-1. +4-B3cOL3/leopold' /usr/bin/perl /usr/local/share/perl/5.8.7/ExtUtils/xsubpp -typemap /u +sr/share/perl/5.8/ExtUtils/typemap -typemap typemap Faster.xs > Fast +er.xsc && mv Faster.xsc Faster.c cc -c -I. -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fn +o-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_F +ILE_OFFSET_BITS=64 -O2 -DVERSION=\"1.4\" -DXS_VERSION=\"1.4\" -fPIC + "-I/usr/lib/perl/5.8/CORE" Faster.c Running Mkbootstrap for Bloom::Faster () chmod 644 Faster.bs rm -f blib/arch/auto/Bloom/Faster/Faster.so LD_RUN_PATH="" cc -shared -L/usr/local/lib Faster.o -o blib/arch/aut +o/Bloom/Faster/Faster.so leopold/src/.libs/libbloom.a /usr/bin/ld: leopold/src/.libs/libbloom.a(bloom.o): relocation R_X86_6 +4_32 against `a local symbol' can not be used when making a shared ob +ject; recompile with -fPIC leopold/src/.libs/libbloom.a: could not read symbols: Bad value collect2: ld gab 1 als Ende-Status zurück make: *** [blib/arch/auto/Bloom/Faster/Faster.so] Fehler 1 PALVARO/Bloom-Faster-1.4.tar.gz /usr/bin/make -- NOT OK Running make test Can't test without successful make Running make install Make had returned bad status, install seems impossible Failed during this command: PALVARO/Bloom-Faster-1.4.tar.gz : make NO

If I need to mess with the Makefile or such, please supply steps, as I am not sure how to properly customize a cpan initiated make.

Replies are listed 'Best First'.
Re: Any chance I get Bloom::Faster running on my 64bit system?
by moritz (Cardinal) on Jun 19, 2008 at 09:28 UTC
    I don't know how to help, I just know that you're not alone. If you look at the cpan testers matrix, click on the linux and freebsd failures - they are all problems with 64 bit machines.

    Maybe you should write a bug report.

      Already did that... Also headed over to annocpan. Bug report would be the right way- time to get a cpan account...

      Nevertheless, any further ideas how to solve this?
        There's a similar error been reported on the perldl mailing list regarding the building of pgplot. See the thread [Perldl] Instaliing PGPLOT in ubuntu at http://mailman.jach.hawaii.edu/pipermail/perldl/2008-June/thread.html.

        The matter is not actually resolved there, but at least you might get some ideas about what's needed. (I think there's a number of pgplot-specific issues mentioned there that won't apply to the bloom library.) The advice seems to be that you would need to re-build the bloom library, editing the makefile to include -fPIC as an option to the compiler and linker. (With luck, that might be all you need to do.)

        Anyway ... take a look and see if there's something there that helps.

        Cheere,
        Rob
Re: Any chance I get Bloom::Faster running on my 64bit system?
by telemachus (Friar) on Jun 19, 2008 at 22:03 UTC
    I have no advice on the problem and not to be a jerk, but, um, Vanna can I buy a Read more tag? Pretty please?

    Edit: I realize that it's not quite your fault that it's currently the front page for me, but still...

Re: Any chance I get Bloom::Faster running on my 64bit system?
by Anonymous Monk on Jul 29, 2008 at 04:36 UTC
    Hello there.

    I was able to get it running. You just have to edit the tar'd Makefile.in file to add -fPIC to all the compile lines. Then the 64-bit version will compile.

    I would post the new version of the software that runs for me, but I'm still adding features and haven't blast-tested it yet.

    (The ability to save and restore from a file, the ability to stay inside a shared memory segment.)

Re: Any chance I get Bloom::Faster running on my 64bit system?
by dvryaboy (Sexton) on Jun 24, 2009 at 00:06 UTC
    I know it's like, a year late, but we finally posted a new version to CPAN. It's a bit cleaned up, the compilation process simplified, and a new feature added (serialization to disk). If anyone stumbles onto this thread -- don't worry, version 1.6 should be ok on 64bit systems (though we'll see what cpan-testers says, we only tested on Ubuntu and OS X )