Project

General

Profile

Misc #17174

"Error relocating, symbol not found" error when compiling a native extension on Alpine with Ruby >=2.4

Added by Nakilon (Victor Maslov) about 1 month ago. Updated 19 days ago.

Status:
Open
Priority:
Normal
Assignee:
-
[ruby-core:100022]

Description

My native extension gem compiles fine with all versions of Ruby on macOS but only with Ruby 2.3 on Alpine. It throws various Error relocating, symbol not found when I require the .o file. Here I made a branch to reproduce it in Docker quickly.

git clone https://github.com/Nakilon/dhash-vips.git --branch alpine-compilation-issues alpine-compilation-issues && cd alpine-compilation-issues
# compiles and does not fail on require
docker build - -t temp-ruby2.3.8 --build-arg RUBY_VERSION=2.3.8 --build-arg ALPINE_VERSION=3.8 <Dockerfile

# Error relocating /dhash-vips/idhash.so: rb_deprecate_constant: symbol not found - /dhash-vips/idhash.so (LoadError)
docker build - -t temp-ruby2.4.10 --build-arg RUBY_VERSION=2.4.10 --build-arg ALPINE_VERSION=3.11 <Dockerfile

# Error relocating /dhash-vips/idhash.so: rb_int_modulo: symbol not found - /dhash-vips/idhash.so (LoadError)
docker build - -t temp-ruby2.5.8 --build-arg RUBY_VERSION=2.5.8 --build-arg ALPINE_VERSION=3.12 <Dockerfile

# Error relocating /dhash-vips/idhash.so: rb_int_pow: symbol not found - /dhash-vips/idhash.so (LoadError)
docker build - -t temp-ruby2.6.6 --build-arg RUBY_VERSION=2.6.6 --build-arg ALPINE_VERSION=3.12 <Dockerfile

I wanted to ask in the Mailing List but for some reason my email didn't reach it. Guy on Freenode recommended to post here.

Updated by Nakilon (Victor Maslov) 19 days ago

Nakilon (Victor Maslov) wrote:

docker build - -t temp-ruby2.3.8 --build-arg RUBY_VERSION=2.3.8 --build-arg ALPINE_VERSION=3.8 <Dockerfile

Also tried the same version of Alpine but higher Ruby -- ruby:2.4.6-alpine3.8 -- got the same

in `require_relative': Error relocating /dhash-vips/idhash.so: rb_deprecate_constant: symbol not found

that as I suppose confirms that it's not just Alpine/musl issue but something has changed in Ruby since 2.4

Meanwhile ruby:slim docker images work fine (tested 2.4.9 and 2.7.2) but they are too large...

Also available in: Atom PDF