Bug#680058: kyotocabinet: FTBFS on i386 with gcc-multilib: /usr/bin/ld: cannot find -llzma

July 03rd, 2012 - 05:30 am ET by Jakub Wilk | Report spam
Source: kyotocabinet
Version: 1.2.76-2
Severity: serious
Justification: fails to build from source

If gcc-multilib is installed on an i386 system, kyotocabinet FTBFS:
| if uname -a | egrep -i 'SunOS' > /dev/null ; \
| then \
| g++ -m64 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -fPIC -fsigned-char -g0 -O2 -Wno-unused-but-set-variable -Wno-unused-but-set-parameter -shared -Wl,-G,-h,libkyotocabinet.so.16 -o libkyotocabinet.so.16.13.0 \
| kcutil.o kcthread.o kcfile.o kccompress.o kccompare.o kcmap.o kcregex.o kcdb.o kcplantdb.o kcprotodb.o kcstashdb.o kccachedb.o kchashdb.o kcdirdb.o kctextdb.o kcpolydb.o kcdbext.o kclangc.o -Wl,-z,relro -L. -L/usr/lib/i386-linux-gnu -L/usr/local/lib -Wl,-rpath-link,.:/usr/local/lib:.:/usr/local/lib: -Wl,--as-needed -llzma -llzo2 -lz -lstdc++ -lrt -lpthread -lm -lc ; \
| else \
| g++ -m64 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -fPIC -fsigned-char -g0 -O2 -Wno-unused-but-set-variable -Wno-unused-but-set-parameter -shared -Wl,-soname,libkyotocabinet.so.16 -o libkyotocabinet.so.16.13.0 \
| kcutil.o kcthread.o kcfile.o kccompress.o kccompare.o kcmap.o kcregex.o kcdb.o kcplantdb.o kcprotodb.o kcstashdb.o kccachedb.o kchashdb.o kcdirdb.o kctextdb.o kcpolydb.o kcdbext.o kclangc.o -Wl,-z,relro -L. -L/usr/lib/i386-linux-gnu -L/usr/local/lib -Wl,-rpath-link,.:/usr/local/lib:.:/usr/local/lib: -Wl,--as-needed -llzma -llzo2 -lz -lstdc++ -lrt -lpthread -lm -lc ; \
| fi
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzma.so when searching for -llzma
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzma.a when searching for -llzma
| /usr/bin/ld: cannot find -llzma
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzo2.so when searching for -llzo2
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzo2.a when searching for -llzo2
| /usr/bin/ld: cannot find -llzo2
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libz.so when searching for -lz
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libz.a when searching for -lz
| /usr/bin/ld: cannot find -lz
| /usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.7/libstdc++.so when searching for -lstdc++
| /usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.7/libstdc++.a when searching for -lstdc++
| /usr/bin/ld: cannot find -lstdc++
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/librt.so when searching for -lrt
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/librt.a when searching for -lrt
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libpthread.so when searching for -lpthread
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libpthread.a when searching for -lpthread
| collect2: error: ld returned 1 exit status
| make[1]: *** [libkyotocabinet.so.16.13.0] Error 1

It's apparently because the configure script assumes that if it's
possible built a program using -m64, then it's the right thing to build
the library using this option:

| printf 'checking for 64-bit availability... '
| if printf 'main() {}' | $CC -xc -m64 -o config.tmp - >config.tmp 2>&1
| then
| MYCFLAGS="-m64 $MYCFLAGS"
| MYCXXFLAGS="-m64 $MYCXXFLAGS"
| printf 'yes'
| else
| printf 'no'
| fi

This is of course flawed assumption.

Jakub Wilk



To UNSUBSCRIBE, email to debian-bugs-dist-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
email Follow the discussionReplies 1 replyReplies Make a reply

Replies

#1 shawn
July 03rd, 2012 - 12:30 pm ET | Report spam
tag 680058 pending

On Tue, 2012-07-03 at 11:23 +0200, Jakub Wilk wrote:
Source: kyotocabinet
Version: 1.2.76-2
Severity: serious
Justification: fails to build from source

If gcc-multilib is installed on an i386 system, kyotocabinet FTBFS:
| if uname -a | egrep -i 'SunOS' > /dev/null ; \
| then \
| g++ -m64 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -fPIC -fsigned-char -g0 -O2 -Wno-unused-but-set-variable -Wno-unused-but-set-parameter -shared -Wl,-G,-h,libkyotocabinet.so.16 -o libkyotocabinet.so.16.13.0 \
| kcutil.o kcthread.o kcfile.o kccompress.o kccompare.o kcmap.o kcregex.o kcdb.o kcplantdb.o kcprotodb.o kcstashdb.o kccachedb.o kchashdb.o kcdirdb.o kctextdb.o kcpolydb.o kcdbext.o kclangc.o -Wl,-z,relro -L. -L/usr/lib/i386-linux-gnu -L/usr/local/lib -Wl,-rpath-link,.:/usr/local/lib:.:/usr/local/lib: -Wl,--as-needed -llzma -llzo2 -lz -lstdc++ -lrt -lpthread -lm -lc ; \
| else \
| g++ -m64 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall -fPIC -fsigned-char -g0 -O2 -Wno-unused-but-set-variable -Wno-unused-but-set-parameter -shared -Wl,-soname,libkyotocabinet.so.16 -o libkyotocabinet.so.16.13.0 \
| kcutil.o kcthread.o kcfile.o kccompress.o kccompare.o kcmap.o kcregex.o kcdb.o kcplantdb.o kcprotodb.o kcstashdb.o kccachedb.o kchashdb.o kcdirdb.o kctextdb.o kcpolydb.o kcdbext.o kclangc.o -Wl,-z,relro -L. -L/usr/lib/i386-linux-gnu -L/usr/local/lib -Wl,-rpath-link,.:/usr/local/lib:.:/usr/local/lib: -Wl,--as-needed -llzma -llzo2 -lz -lstdc++ -lrt -lpthread -lm -lc ; \
| fi
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzma.so when searching for -llzma
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzma.a when searching for -llzma
| /usr/bin/ld: cannot find -llzma
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzo2.so when searching for -llzo2
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/liblzo2.a when searching for -llzo2
| /usr/bin/ld: cannot find -llzo2
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libz.so when searching for -lz
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libz.a when searching for -lz
| /usr/bin/ld: cannot find -lz
| /usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.7/libstdc++.so when searching for -lstdc++
| /usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.7/libstdc++.a when searching for -lstdc++
| /usr/bin/ld: cannot find -lstdc++
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/librt.so when searching for -lrt
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/librt.a when searching for -lrt
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libpthread.so when searching for -lpthread
| /usr/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libpthread.a when searching for -lpthread
| collect2: error: ld returned 1 exit status
| make[1]: *** [libkyotocabinet.so.16.13.0] Error 1

It's apparently because the configure script assumes that if it's
possible built a program using -m64, then it's the right thing to build
the library using this option:

| printf 'checking for 64-bit availability... '
| if printf 'main() {}' | $CC -xc -m64 -o config.tmp - >config.tmp 2>&1
| then
| MYCFLAGS="-m64 $MYCFLAGS"
| MYCXXFLAGS="-m64 $MYCXXFLAGS"
| printf 'yes'
| else
| printf 'no'
| fi

This is of course flawed assumption.




I stared at this part of the control file so much I should have
understood the implications of that line. Thanks for doing some QA on my
package.

Anyways, I've uploaded to mentors a new version that fixes this.

kyotocabinet (1.2.76-4) unstable; urgency=low

* use breaks/replaces for smooth upgrades fallowing man page move -doc
* do not unconditionally use -m64 when available (Closes: #680058)
* obey DEB_BUILD_OPTIONS=noopt of Policy 4.9.1

-0700

-Shawn Landden




To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact

Similar topics