OpenSSL is supposed to be provided by your nodejs runtime. If the file
you're building can't find this symbol at runtime, it means your nodejs
runtime isn't providing its necessary dependencies properly.

Where does this runtime come from?

On Tue, Apr 16, 2019 at 5:28 AM Maciej Pijanowski <
[email protected]> wrote:

> Hello,
>
> I'm using [Yocto 2.6.1](https://www.yoctoproject.org/)
> with
> [meta-raspberrypi](
> http://git.yoctoproject.org/cgit/cgit.cgi/meta-raspberrypi)
> layer to build the image for RaspberryPi Zero.
>
> The gcc is `8.2.0` and the `node` is `8.12.0`.
>
> The `grpc-node` is a dependency for a Node package I'm building. However,
> I'm now focused
> on getting the `grpc-node` to work. It is the only package which contains
> native
> code to be compiled. The precompiled version is for `armv7` as explained
> here:
> https://github.com/googleapis/nodejs-speech/issues/12
>
> I'm well aware of the issue with `node-pre-gyp` mentioned there:
> https://github.com/mapbox/node-pre-gyp/issues/348
> However, I think that it might not be the problem in my case since I'm
> building
> my own toolchain, specifically tweaked for the target (RPI 0) architecture.
>
> In fact, I'm already getting the `armv6` binary crosscompiled:
>
> ```
> Attribute Section: aeabi
> File Attributes
>   Tag_CPU_name: "6"
>   Tag_CPU_arch: v6
>   Tag_ARM_ISA_use: Yes
>   Tag_THUMB_ISA_use: Thumb-1
>   Tag_FP_arch: VFPv2
>   Tag_ABI_PCS_wchar_t: 4
>   Tag_ABI_FP_denormal: Needed
>   Tag_ABI_FP_exceptions: Needed
>   Tag_ABI_FP_number_model: IEEE 754
>   Tag_ABI_align_needed: 8-byte
>   Tag_ABI_align_preserved: 8-byte, except leaf SP
>   Tag_ABI_enum_size: int
>   Tag_ABI_VFP_args: VFP registers
>   Tag_CPU_unaligned_access: v6
> ```
>
> While the `arm` precompiled binary from the npm registry looks like:
>
> ```
> Attribute Section: aeabi
> File Attributes
>   Tag_CPU_name: "7-A"
>   Tag_CPU_arch: v7
>   Tag_CPU_arch_profile: Application
>   Tag_ARM_ISA_use: Yes
>   Tag_THUMB_ISA_use: Thumb-2
>   Tag_FP_arch: VFPv3-D16
>   Tag_ABI_PCS_wchar_t: 4
>   Tag_ABI_FP_denormal: Needed
>   Tag_ABI_FP_exceptions: Needed
>   Tag_ABI_FP_number_model: IEEE 754
>   Tag_ABI_align_needed: 8-byte
>   Tag_ABI_align_preserved: 8-byte, except leaf SP
>   Tag_ABI_enum_size: int
>   Tag_ABI_VFP_args: VFP registers
>   Tag_CPU_unaligned_access: v6
> ```
>
> The runtime error I'm getting right now (`Illegall instruction` error is
> gone)
> is:
>
> ```
> root@raspberrypi0-wifi:~# node
> > require('/usr/lib/node/firebase/node_modules/grpc')
> Error:
> /usr/lib/node/firebase/node_modules/grpc/src/node/extension_binary/node-v57-linux-arm-glibc/grpc_node.node:
> undefined symbol: CRYPTO_set_locking_callback
>     at Object.Module._extensions..node (module.js:682:18)
>     at Module.load (module.js:566:32)
>     at tryModuleLoad (module.js:506:12)
>     at Function.Module._load (module.js:498:3)
>     at Module.require (module.js:597:17)
>     at require (internal/module.js:11:18)
> ```
>
> However, both pre-compiled (for `armv7`) and the cross-compiled (for
> `armv6`)
> binaries seem to have this symbol undefined:
>
> precompiled:
>
> ```
>     25: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND
> CRYPTO_set_locking_callba
> ```
>
> cross-compiled:
>
> ```
>     27: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND
> CRYPTO_set_locking_callba
> ```
>
> Do I need anything more than the `grpc_node.node` binary correctly
> compiled for
> the target architecture?
>
> Now I'm wondering what's the OpenSSL requirement of the `grpc`. Does it
> require
> OpenSSL at compile time / at runtime?
>
> I can see that there is an option for `BoringSSL` (I assume linked
> statically?)
> or to use the `OpenSSL` dynamic library from the system - is that correct?
>
> How one can choose which one to use? What would be the "default" setting
> for
> the Node package on ARM Linux system, which depends on the `grpc-node`
> package?
>
> As a side note, I faced some issues as descriebd in various GCC 8 issues
> like this one:
> https://github.com/grpc/grpc/issues/18689 and silenced them down with gcc
> flags: `"-Wno-class-memaccess -Wno-ignored-qualifiers
> -Wno-cast-function-type"`
> to keep going.
>
> Please note that I'm far from Node expert / dev. I work on various build
> systems, mostly in embedded area. I'm willing to help in resolving the
> cross-compilation issues. However, I would need to get some better
> understanding
> of how the `grpc` is being built - especially it's requirements on the
> OpenSSL.
>
> Thanks for any feedback
>
> --
> You received this message because you are subscribed to the Google Groups "
> grpc.io" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/grpc-io.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/grpc-io/26285314-420b-41cf-905d-1dd9eac8632a%40googlegroups.com
> <https://groups.google.com/d/msgid/grpc-io/26285314-420b-41cf-905d-1dd9eac8632a%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CAEvr0PGbFdZ%2Bq2_%3D%3DbeHDANugFAJQrE8iH%3DoxXpikk8vQefvug%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to