erlangpack / bcrypt

Erlang wrapper for OpenBSD's Blowfish password hashing code
https://hex.pm/packages/bcrypt
Other
16 stars 19 forks source link

Compilation fails - cannot find -lerl_interface #18

Closed drasko closed 3 years ago

drasko commented 3 years ago
drasko@Mando:~/erlang/abstract$ make
make[1]: Entering directory '/home/drasko/erlang/abstract/deps/bcrypt'
CC=cc make -C c_src
make[2]: Entering directory '/home/drasko/erlang/abstract/deps/bcrypt/c_src'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/drasko/erlang/abstract/deps/bcrypt/c_src'
cc -o priv/bcrypt_drv.so c_src/async_queue.o c_src/bcrypt.o c_src/bcrypt_nif.o c_src/bcrypt_port.o c_src/blowfish.o  -L "/usr/lib/erlang/lib/erl_interface-4.0.1/lib" -lerl_interface -lei   -shared
/usr/bin/ld: cannot find -lerl_interface
collect2: error: ld returned 1 exit status
make[2]: *** [c_src/Makefile.erlang.mk:21: priv/bcrypt_drv.so] Error 1
make[1]: *** [Makefile:27: pre-app] Error 2
make[1]: Leaving directory '/home/drasko/erlang/abstract/deps/bcrypt'
make: *** [erlang.mk:4441: deps] Error 2

Erlang version:

drasko@Mando:~/erlang/abstract$ erl
Erlang/OTP 23 [erts-11.1.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]

Eshell V11.1.3  (abort with ^G)
1> 
mworrell commented 3 years ago

Do you use the newest version (master) of bcrypt?

drasko commented 3 years ago

It fails with master as well. As I explained in https://github.com/ferd/erlpass/issues/19#issuecomment-743999673 problem is with OTP23 removing deprecated parts of erl_interface.

cc /home/drasko/erlang/abstract/deps/bcrypt/c_src/async_queue.o /home/drasko/erlang/abstract/deps/bcrypt/c_src/bcrypt_port.o /home/drasko/erlang/abstract/deps/bcrypt/c_src/blowfish.o /home/drasko/erlang/abstract/deps/bcrypt/c_src/bcrypt.o /home/drasko/erlang/abstract/deps/bcrypt/c_src/bcrypt_nif.o  -shared -L /usr/lib/erlang/lib/erl_interface-4.0.1/lib -lei -lpthread -o /home/drasko/erlang/abstract/deps/bcrypt/c_src/../priv/bcrypt_nif.so
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include bcrypt_port.o bcrypt.o blowfish.o  -L /usr/lib/erlang/lib/erl_interface-4.0.1/lib -lei -lpthread -o ../priv/bcrypt
make[2]: Leaving directory '/home/drasko/erlang/abstract/deps/bcrypt/c_src'
cc -o priv/bcrypt_drv.so c_src/async_queue.o c_src/bcrypt.o c_src/bcrypt_nif.o c_src/bcrypt_port.o c_src/blowfish.o  -L "/usr/lib/erlang/lib/erl_interface-4.0.1/lib" -lerl_interface -lei   -shared
/usr/bin/ld: cannot find -lerl_interface
collect2: error: ld returned 1 exit status
make[2]: *** [c_src/Makefile.erlang.mk:21: priv/bcrypt_drv.so] Error 1
make[1]: *** [Makefile:27: pre-app] Error 2
make[1]: Leaving directory '/home/drasko/erlang/abstract/deps/bcrypt'
make: *** [erlang.mk:4441: deps] Error 2
drasko@Mando:~/erlang/abstract$ 
mworrell commented 3 years ago

That is unexpected, as I am using bcrypt with OTP23.1 and we did remove the dependency.

Will check separately.

Which OS are you using?

mworrell commented 3 years ago

I just compiled master (at 550281173c2f4e414b6da6711e4eb23e4e7884d1) on macOS with OTP 23.1.

Works fine, also passes the tests.

bcrypt marc$ make
./rebar3 compile
===> Verifying dependencies...
cc -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes -fPIC -I /Users/marc/erlang/23.1/erts-11.1/include/ -I /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/include  -c -o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt_port.o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt_port.c
cc -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes -fPIC -I /Users/marc/erlang/23.1/erts-11.1/include/ -I /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/include  -c -o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt_nif.o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt_nif.c
cc -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes -fPIC -I /Users/marc/erlang/23.1/erts-11.1/include/ -I /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/include  -c -o /Users/marc/Sites/misc/bcrypt/c_src/async_queue.o /Users/marc/Sites/misc/bcrypt/c_src/async_queue.c
cc -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes -fPIC -I /Users/marc/erlang/23.1/erts-11.1/include/ -I /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/include  -c -o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt.o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt.c
cc -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes -fPIC -I /Users/marc/erlang/23.1/erts-11.1/include/ -I /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/include  -c -o /Users/marc/Sites/misc/bcrypt/c_src/blowfish.o /Users/marc/Sites/misc/bcrypt/c_src/blowfish.c
cc /Users/marc/Sites/misc/bcrypt/c_src/bcrypt_port.o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt_nif.o /Users/marc/Sites/misc/bcrypt/c_src/async_queue.o /Users/marc/Sites/misc/bcrypt/c_src/bcrypt.o /Users/marc/Sites/misc/bcrypt/c_src/blowfish.o -arch x86_64 -flat_namespace -undefined suppress -shared -L /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/lib -lei -lpthread -o /Users/marc/Sites/misc/bcrypt/c_src/../priv/bcrypt_nif.so
cc -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes -fPIC -I /Users/marc/erlang/23.1/erts-11.1/include/ -I /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/include bcrypt_port.o bcrypt.o blowfish.o -flat_namespace -undefined suppress  -L /Users/marc/erlang/23.1/lib/erl_interface-4.0.1/lib -lei -lpthread -o ../priv/bcrypt
===> Analyzing applications...
===> Compiling bcrypt

PoToi:bcrypt marc$ erl
Erlang/OTP 23 [erts-11.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [hipe]

Eshell V11.1  (abort with ^G)
1> 
drasko commented 3 years ago

Project itself compiles for me also:

drasko@Mando:~/erlang/bcrypt$ make -j 16
erl -noshell -s inets start -s ssl start \
    -eval '{ok, saved_to_file} = httpc:request(get, {"https://s3.amazonaws.com/rebar3/rebar3", []}, [], [{stream, "./rebar3"}])' \
    -s inets stop -s init stop
=INFO REPORT==== 22-Dec-2020::17:14:10.121708 ===
    application: inets
    exited: stopped
    type: temporary

chmod +x ./rebar3
./rebar3 compile
===> Verifying dependencies...
===> Fetching poolboy v1.5.2
===> Analyzing applications...
===> Compiling poolboy
make[1]: warning: jobserver unavailable: using -j1.  Add '+' to parent make rule.
make[1]: Entering directory '/home/drasko/erlang/bcrypt/c_src'
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include  -c -o /home/drasko/erlang/bcrypt/c_src/async_queue.o /home/drasko/erlang/bcrypt/c_src/async_queue.c
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:25,
                 from /home/drasko/erlang/bcrypt/c_src/async_queue.h:36,
                 from /home/drasko/erlang/bcrypt/c_src/async_queue.c:32:
/usr/include/features.h:187:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
  187 | # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
      |   ^~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include  -c -o /home/drasko/erlang/bcrypt/c_src/bcrypt_port.o /home/drasko/erlang/bcrypt/c_src/bcrypt_port.c
In file included from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from /home/drasko/erlang/bcrypt/c_src/bcrypt_port.c:17:
/usr/include/features.h:187:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
  187 | # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
      |   ^~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include  -c -o /home/drasko/erlang/bcrypt/c_src/blowfish.o /home/drasko/erlang/bcrypt/c_src/blowfish.c
In file included from /usr/include/x86_64-linux-gnu/sys/types.h:25,
                 from /home/drasko/erlang/bcrypt/c_src/blowfish.c:47:
/usr/include/features.h:187:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
  187 | # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
      |   ^~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include  -c -o /home/drasko/erlang/bcrypt/c_src/bcrypt.o /home/drasko/erlang/bcrypt/c_src/bcrypt.c
In file included from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from /home/drasko/erlang/bcrypt/c_src/bcrypt.c:48:
/usr/include/features.h:187:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
  187 | # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
      |   ^~~~~~~
/home/drasko/erlang/bcrypt/c_src/bcrypt.c: In function ‘encode_salt’:
/home/drasko/erlang/bcrypt/c_src/bcrypt.c:137:31: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  137 |  snprintf(salt + 4, 4, "%2.2u$", logr);
      |                               ^
/home/drasko/erlang/bcrypt/c_src/bcrypt.c:137:2: note: ‘snprintf’ output between 4 and 5 bytes into a destination of size 4
  137 |  snprintf(salt + 4, 4, "%2.2u$", logr);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/drasko/erlang/bcrypt/c_src/bcrypt.c: In function ‘ts_bcrypt’:
/home/drasko/erlang/bcrypt/c_src/bcrypt.c:241:36: warning: ‘snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  241 |  snprintf(encrypted + i, 4, "%2.2u$", logr);
      |                                    ^
/home/drasko/erlang/bcrypt/c_src/bcrypt.c:241:2: note: ‘snprintf’ output between 4 and 5 bytes into a destination of size 4
  241 |  snprintf(encrypted + i, 4, "%2.2u$", logr);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include  -c -o /home/drasko/erlang/bcrypt/c_src/bcrypt_nif.o /home/drasko/erlang/bcrypt/c_src/bcrypt_nif.c
In file included from /usr/include/assert.h:35,
                 from /home/drasko/erlang/bcrypt/c_src/bcrypt_nif.c:17:
/usr/include/features.h:187:3: warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE" [-Wcpp]
  187 | # warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
      |   ^~~~~~~
cc /home/drasko/erlang/bcrypt/c_src/async_queue.o /home/drasko/erlang/bcrypt/c_src/bcrypt_port.o /home/drasko/erlang/bcrypt/c_src/blowfish.o /home/drasko/erlang/bcrypt/c_src/bcrypt.o /home/drasko/erlang/bcrypt/c_src/bcrypt_nif.o  -shared -L /usr/lib/erlang/lib/erl_interface-4.0.1/lib -lei -lpthread -o /home/drasko/erlang/bcrypt/c_src/../priv/bcrypt_nif.so
cc -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes -D_BSD_SOURCE -fPIC -I /usr/lib/erlang/erts-11.1.3/include/ -I /usr/lib/erlang/lib/erl_interface-4.0.1/include bcrypt_port.o bcrypt.o blowfish.o  -L /usr/lib/erlang/lib/erl_interface-4.0.1/lib -lei -lpthread -o ../priv/bcrypt
make[1]: Leaving directory '/home/drasko/erlang/bcrypt/c_src'
===> Analyzing applications...
===> Compiling bcrypt
drasko@Mando:~/erlang/bcrypt$

Let me inspect again why it fails as a dependency...

drasko commented 3 years ago

OK, found an error - it was coming from the old version of erlang.mk that I am using for my project.

Thanks for the help, I am closing this one.

mworrell commented 3 years ago

Thanks for testing and finding the issue!