Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alpine linux support (link musl) #50

Closed
protolambda opened this issue Mar 10, 2020 · 2 comments
Closed

Alpine linux support (link musl) #50

protolambda opened this issue Mar 10, 2020 · 2 comments

Comments

@protolambda
Copy link

The Go-BLS build works for me, but when I run it on Alpine linux (no glibc, only musl), it fails to run.
Alpine is a widely used light-weight environment for docker-containers.

Can we build the Amd64 target without glibc, to enable Alpine linux?

This is what I get when I run it in my CI environment:

# github.com/herumi/bls-eth-go-binary/bls
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `Xbyak::util::Pack::sub(unsigned long, unsigned long) const [clone .constprop.401]':
fp.cpp:(.text+0x201): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `mcl::fp::sha512(void*, unsigned int, void const*, unsigned int)':
fp.cpp:(.text+0xee9): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `mcl::fp::Op::init(mcl::VintT<mcl::vint::FixedBuffer<unsigned long, 768ul> > const&, unsigned long, int, mcl::fp::Mode, unsigned long)':
fp.cpp:(.text+0xb50f): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `Xbyak::util::Pack::append(Xbyak::Reg64 const&) [clone .part.58]':
fp.cpp:(.text.unlikely+0x1b1): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `Xbyak::util::Pack::init(Xbyak::Reg64 const*, unsigned long) [clone .part.59]':
fp.cpp:(.text.unlikely+0x209): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `mcl::fp::FpGenerator::mkLabel[abi:cxx11](char const*, int) const [clone .isra.296]':
fp.cpp:(.text._ZNK3mcl2fp11FpGenerator7mkLabelB5cxx11EPKci.isra.296[_ZN3mcl2fp11FpGenerator10gen_preInvEv]+0x49): undefined reference to `__snprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `cybozu::sha2_local::hmac256_inner(void*, void const*, unsigned long, void const*, unsigned long, bool)':
fp.cpp:(.text._ZN6cybozu10sha2_local13hmac256_innerEPvPKvmS3_mb[_ZN6cybozu10sha2_local13hmac256_innerEPvPKvmS3_mb]+0x66a): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: fp.cpp:(.text._ZN6cybozu10sha2_local13hmac256_innerEPvPKvmS3_mb[_ZN6cybozu10sha2_local13hmac256_innerEPvPKvmS3_mb]+0x889): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `Xbyak::util::Pack::operator[](unsigned long) const':
fp.cpp:(.text._ZNK5Xbyak4util4PackixEm[_ZNK5Xbyak4util4PackixEm]+0x2e): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `Xbyak::util::Pack::sub(unsigned long, unsigned long) const':
fp.cpp:(.text._ZNK5Xbyak4util4Pack3subEmm[_ZNK5Xbyak4util4Pack3subEmm]+0x17a): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `Xbyak::util::Profiler::set(char const*, void const*)':
fp.cpp:(.text._ZN5Xbyak4util8Profiler3setEPKcPKv[_ZN5Xbyak4util8Profiler3setEPKcPKv]+0x4c): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o): in function `mcl::fp::FpGenerator::cmovc_rr(Xbyak::util::Pack const&, Xbyak::util::Pack const&)':
fp.cpp:(.text._ZN3mcl2fp11FpGenerator8cmovc_rrERKN5Xbyak4util4PackES6_[_ZN3mcl2fp11FpGenerator8cmovc_rrERKN5Xbyak4util4PackES6_]+0x9d): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: fp.cpp:(.text._ZN3mcl2fp11FpGenerator8cmovc_rrERKN5Xbyak4util4PackES6_[_ZN3mcl2fp11FpGenerator8cmovc_rrERKN5Xbyak4util4PackES6_]+0xf4): undefined reference to `__fprintf_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(fp.o):fp.cpp:(.text._ZN3mcl2fp11FpGenerator7load_rmIN5Xbyak6RegExpEEEvRKNS3_4util4PackERKT_[_ZN3mcl2fp11FpGenerator7load_rmIN5Xbyak6RegExpEEEvRKNS3_4util4PackERKT_]+0x28f): more undefined references to `__fprintf_chk' follow
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `void mcl::EcT<mcl::FpT<mcl::bn::local::FpTag, 384ul> >::save<cybozu::MemoryOutputStream>(bool*, cybozu::MemoryOutputStream&, int) const [clone .constprop.101]':
bls_c384_256.cpp:(.text+0x7559): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: bls_c384_256.cpp:(.text+0x7581): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `mcl::FpT<mcl::bn::local::FpTag, 384ul>::init(bool*, int, mcl::VintT<mcl::vint::FixedBuffer<unsigned long, 768ul> > const&, mcl::fp::Mode)':
bls_c384_256.cpp:(.text._ZN3mcl3FpTINS_2bn5local5FpTagELm384EE4initEPbiRKNS_5VintTINS_4vint11FixedBufferImLm768EEEEENS_2fp4ModeE[_ZN3mcl3FpTINS_2bn5local5FpTagELm384EE4initEPbiRKNS_5VintTINS_4vint11FixedBufferImLm768EEEEENS_2fp4ModeE]+0x174): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `mcl::FpT<mcl::bn::local::FrTag, 256ul>::init(bool*, int, mcl::VintT<mcl::vint::FixedBuffer<unsigned long, 768ul> > const&, mcl::fp::Mode)':
bls_c384_256.cpp:(.text._ZN3mcl3FpTINS_2bn5local5FrTagELm256EE4initEPbiRKNS_5VintTINS_4vint11FixedBufferImLm768EEEEENS_2fp4ModeE[_ZN3mcl3FpTINS_2bn5local5FrTagELm256EE4initEPbiRKNS_5VintTINS_4vint11FixedBufferImLm768EEEEENS_2fp4ModeE]+0x174): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `unsigned long mcl::fp::readHexStr<cybozu::MemoryInputStream>(void*, unsigned long, cybozu::MemoryInputStream&)':
bls_c384_256.cpp:(.text._ZN3mcl2fp10readHexStrIN6cybozu17MemoryInputStreamEEEmPvmRT_[_ZN3mcl2fp10readHexStrIN6cybozu17MemoryInputStreamEEEmPvmRT_]+0x58): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `unsigned long mcl::fp::arrayToDec<unsigned long>(char*, unsigned long, unsigned long const*, unsigned long)':
bls_c384_256.cpp:(.text._ZN3mcl2fp10arrayToDecImEEmPcmPKT_m[_ZN3mcl2fp10arrayToDecImEEmPcmPKT_m]+0x94): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `void mcl::EcT<mcl::FpT<mcl::bn::local::FpTag, 384ul> >::save<cybozu::MemoryOutputStream>(bool*, cybozu::MemoryOutputStream&, int) const':
bls_c384_256.cpp:(.text._ZNK3mcl3EcTINS_3FpTINS_2bn5local5FpTagELm384EEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i[_ZNK3mcl3EcTINS_3FpTINS_2bn5local5FpTagELm384EEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i]+0x5a1): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: bls_c384_256.cpp:(.text._ZNK3mcl3EcTINS_3FpTINS_2bn5local5FpTagELm384EEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i[_ZNK3mcl3EcTINS_3FpTINS_2bn5local5FpTagELm384EEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i]+0x5ca): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `void mcl::EcT<mcl::Fp2T<mcl::FpT<mcl::bn::local::FpTag, 384ul> > >::save<cybozu::MemoryOutputStream>(bool*, cybozu::MemoryOutputStream&, int) const':
bls_c384_256.cpp:(.text._ZNK3mcl3EcTINS_4Fp2TINS_3FpTINS_2bn5local5FpTagELm384EEEEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i[_ZNK3mcl3EcTINS_4Fp2TINS_3FpTINS_2bn5local5FpTagELm384EEEEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i]+0x60f): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: bls_c384_256.cpp:(.text._ZNK3mcl3EcTINS_4Fp2TINS_3FpTINS_2bn5local5FpTagELm384EEEEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i[_ZNK3mcl3EcTINS_4Fp2TINS_3FpTINS_2bn5local5FpTagELm384EEEEEE4saveIN6cybozu18MemoryOutputStreamEEEvPbRT_i]+0x63e): undefined reference to `__memset_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `void mcl::EcT<mcl::Fp2T<mcl::FpT<mcl::bn::local::FpTag, 384ul> > >::load<cybozu::MemoryInputStream>(bool*, cybozu::MemoryInputStream&, int)':
bls_c384_256.cpp:(.text._ZN3mcl3EcTINS_4Fp2TINS_3FpTINS_2bn5local5FpTagELm384EEEEEE4loadIN6cybozu17MemoryInputStreamEEEvPbRT_i[_ZN3mcl3EcTINS_4Fp2TINS_3FpTINS_2bn5local5FpTagELm384EEEEEE4loadIN6cybozu17MemoryInputStreamEEEvPbRT_i]+0x112): undefined reference to `__memcpy_chk'
/usr/lib/gcc/x86_64-alpine-linux-musl/9.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: /go/pkg/mod/github.com/herumi/bls-eth-go-binary@v0.0.0-20200310092706-2b0aca401927/bls/lib/linux/amd64/libbls384_256.a(bls_c384_256.o): in function `void mcl::EcT<mcl::FpT<mcl::bn::local::FpTag, 384ul> >::load<cybozu::MemoryInputStream>(bool*, cybozu::MemoryInputStream&, int)':
bls_c384_256.cpp:(.text._ZN3mcl3EcTINS_3FpTINS_2bn5local5FpTagELm384EEEE4loadIN6cybozu17MemoryInputStreamEEEvPbRT_i[_ZN3mcl3EcTINS_3FpTINS_2bn5local5FpTagELm384EEEE4loadIN6cybozu17MemoryInputStreamEEEvPbRT_i]+0xf3): undefined reference to `__memcpy_chk'
collect2: error: ld returned 1 exit status

A summary: a few glibc symbols like __memcpy_chk and __fprintf_chk cannot be found.

I tried adding glibc to alpine linux, but I think it didn't get picked up by the CGO build system.

Locally, on my dev machine with glibc, this all works. It would be great if we can make it work in lightweight environments like Alpine 👍

@protolambda protolambda changed the title Alpine linux support (link muslc, Alpine linux support (link musl) Mar 10, 2020
@herumi
Copy link
Owner

herumi commented Mar 11, 2020

Could you try to make CFLAGS_USER=_FORTIFY_SOURCE=0 to build mcl and bls?
cf. http://man7.org/linux/man-pages/man7/feature_test_macros.7.html

@protolambda
Copy link
Author

Thank you @herumi, that works, I opened a PR on the Go repo: herumi/bls-eth-go-binary#8

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants