Forum: Ruby-core [Backport 200 - Backport #7948][Open] Can not compile pseudo static Ruby binary on OSX

Posted by Michal Papis (mpapis)
on 2013-02-24 19:36
(Received via mailing list)
Issue #7948 has been reported by mpapis (Michal Papis).

----------------------------------------
Backport #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948

Author: mpapis (Michal Papis)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:


In ruby 1.9.x I was using `LDFLAGS="-Bstatic $LDFLAGS"` to force pseudo 
static compilation on OSX (full static is not possible).

This stopped to work with 2.0.0-p0, the binary is compiled but the 
static flag is not handled properly and the generated binary can not 
run:

$ ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby --version
dyld: Symbol not found: _Init_encinit
  Referenced from: 
/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
Trace/BPT trap

using `otool -L ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby` I can 
see the binary depends on a lot more external libraries:

/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current 
version 5.4.0)
  /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility 
version 8.5.0, current version 8.5.7)
  /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl 
(compatibility version 8.5.0, current version 8.5.7)
  /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 
1.0.0)
  /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 
1.0.0)

compared to `otool -L ~/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby`

/Users/mpapis/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)

What is the preferred way to compile static ruby (with minimal external 
dependencies) on systems like OSX which do not provide default package 
manager so no default library paths can be assumed.
Posted by Nobuyoshi Nakada (nobu)
on 2013-02-25 01:26
(Received via mailing list)
Issue #7948 has been updated by nobu (Nobuyoshi Nakada).

Status changed from Open to Feedback

If you want all extension libraries, including encodings and
transcoders, to be statically linked to ruby, then you can use
--with-static-linked-ext configure option.

> What is the preferred way to compile static ruby (with minimal
> external dependencies) on systems like OSX which do not provide
> default package manager so no default library paths can be assumed.

Do you mean external libraries linked to ruby, by "external
dependencies"?

I couldn't get "no default library paths can be assumed", could you
ellaborate?

----------------------------------------
Backport #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948#change-36968

Author: mpapis (Michal Papis)
Status: Feedback
Priority: Normal
Assignee:
Category:
Target version:


In ruby 1.9.x I was using `LDFLAGS="-Bstatic $LDFLAGS"` to force pseudo 
static compilation on OSX (full static is not possible).

This stopped to work with 2.0.0-p0, the binary is compiled but the 
static flag is not handled properly and the generated binary can not 
run:

$ ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby --version
dyld: Symbol not found: _Init_encinit
  Referenced from: 
/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
Trace/BPT trap

using `otool -L ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby` I can 
see the binary depends on a lot more external libraries:

/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current 
version 5.4.0)
  /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility 
version 8.5.0, current version 8.5.7)
  /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl 
(compatibility version 8.5.0, current version 8.5.7)
  /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 
1.0.0)
  /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 
1.0.0)

compared to `otool -L ~/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby`

/Users/mpapis/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)

What is the preferred way to compile static ruby (with minimal external 
dependencies) on systems like OSX which do not provide default package 
manager so no default library paths can be assumed.
Posted by Nobuyoshi Nakada (nobu)
on 2013-02-25 02:39
(Received via mailing list)
Issue #7948 has been updated by nobu (Nobuyoshi Nakada).


Just tried:

 $ ./configure -C --prefix $HOME/ruby/2.0.0-p0-static 
--disable-install-doc --with-out-ext=*win32* LDFLAGS=-Bstatic
 $ make -j4 install

succeeded, and statically linked ruby and extension library shared 
objects are installed.
----------------------------------------
Backport #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948#change-36973

Author: mpapis (Michal Papis)
Status: Feedback
Priority: Normal
Assignee:
Category:
Target version:


In ruby 1.9.x I was using `LDFLAGS="-Bstatic $LDFLAGS"` to force pseudo 
static compilation on OSX (full static is not possible).

This stopped to work with 2.0.0-p0, the binary is compiled but the 
static flag is not handled properly and the generated binary can not 
run:

$ ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby --version
dyld: Symbol not found: _Init_encinit
  Referenced from: 
/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
Trace/BPT trap

using `otool -L ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby` I can 
see the binary depends on a lot more external libraries:

/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current 
version 5.4.0)
  /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility 
version 8.5.0, current version 8.5.7)
  /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl 
(compatibility version 8.5.0, current version 8.5.7)
  /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 
1.0.0)
  /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 
1.0.0)

compared to `otool -L ~/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby`

/Users/mpapis/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)

What is the preferred way to compile static ruby (with minimal external 
dependencies) on systems like OSX which do not provide default package 
manager so no default library paths can be assumed.
Posted by Michal Papis (mpapis)
on 2013-02-25 02:39
(Received via mailing list)
Issue #7948 has been updated by mpapis (Michal Papis).


in the output above you can see:

/Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
/Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)

this are external dependencies that will not be available after moving 
this ruby to other machines.
----------------------------------------
Backport #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948#change-36974

Author: mpapis (Michal Papis)
Status: Feedback
Priority: Normal
Assignee:
Category:
Target version:


In ruby 1.9.x I was using `LDFLAGS="-Bstatic $LDFLAGS"` to force pseudo 
static compilation on OSX (full static is not possible).

This stopped to work with 2.0.0-p0, the binary is compiled but the 
static flag is not handled properly and the generated binary can not 
run:

$ ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby --version
dyld: Symbol not found: _Init_encinit
  Referenced from: 
/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
Trace/BPT trap

using `otool -L ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby` I can 
see the binary depends on a lot more external libraries:

/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current 
version 5.4.0)
  /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility 
version 8.5.0, current version 8.5.7)
  /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl 
(compatibility version 8.5.0, current version 8.5.7)
  /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 
1.0.0)
  /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 
1.0.0)

compared to `otool -L ~/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby`

/Users/mpapis/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)

What is the preferred way to compile static ruby (with minimal external 
dependencies) on systems like OSX which do not provide default package 
manager so no default library paths can be assumed.
Posted by Luis Lavena (luislavena)
on 2013-02-25 02:45
(Received via mailing list)
Issue #7948 has been updated by luislavena (Luis Lavena).


mpapis (Michal Papis) wrote:
> in the output above you can see:
>
> /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
> /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
>
> this are external dependencies that will not be available after moving this ruby 
to other machines.

I deal with this in the past and solved by only building dependencies 
statically.

Can you turn off shared packages and only use static versions?

----------------------------------------
Backport #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948#change-36976

Author: mpapis (Michal Papis)
Status: Feedback
Priority: Normal
Assignee:
Category:
Target version:


In ruby 1.9.x I was using `LDFLAGS="-Bstatic $LDFLAGS"` to force pseudo 
static compilation on OSX (full static is not possible).

This stopped to work with 2.0.0-p0, the binary is compiled but the 
static flag is not handled properly and the generated binary can not 
run:

$ ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby --version
dyld: Symbol not found: _Init_encinit
  Referenced from: 
/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
Trace/BPT trap

using `otool -L ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby` I can 
see the binary depends on a lot more external libraries:

/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current 
version 5.4.0)
  /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility 
version 8.5.0, current version 8.5.7)
  /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl 
(compatibility version 8.5.0, current version 8.5.7)
  /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 
1.0.0)
  /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 
1.0.0)

compared to `otool -L ~/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby`

/Users/mpapis/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)

What is the preferred way to compile static ruby (with minimal external 
dependencies) on systems like OSX which do not provide default package 
manager so no default library paths can be assumed.
Posted by Michal Papis (mpapis)
on 2013-05-19 16:50
(Received via mailing list)
Issue #7948 has been updated by mpapis (Michal Papis).


found it the problem:

```
dyld: Symbol not found: _Init_encinit
  Referenced from: /Users/mpapis/tmp/ruby-bin-static-ext/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/tmp/ruby-bin-static-ext/bin/ruby
Trace/BPT trap: 5
```

was conflicting `--enable-load-relative` with: 
`--with-static-linked-ext` can you add an error in case both are used 
together? or maybe just fix it?

----------------------------------------
Bug #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948#change-39429

Author: mpapis (Michal Papis)
Status: Feedback
Priority: Normal
Assignee:
Category:
Target version:
ruby -v:
Backport:


In ruby 1.9.x I was using `LDFLAGS="-Bstatic $LDFLAGS"` to force pseudo 
static compilation on OSX (full static is not possible).

This stopped to work with 2.0.0-p0, the binary is compiled but the 
static flag is not handled properly and the generated binary can not 
run:

$ ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby --version
dyld: Symbol not found: _Init_encinit
  Referenced from: 
/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
  Expected in: flat namespace
 in /Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby
Trace/BPT trap

using `otool -L ~/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby` I can 
see the binary depends on a lot more external libraries:

/Users/mpapis/.sm/pkg/versions/tokaidoapp/2.0.0-p0/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libssl.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /Users/mpapis/.sm/pkg/versions/openssl/0.9.8y/lib/libcrypto.0.9.8.dylib 
(compatibility version 0.9.8, current version 0.9.8)
  /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current 
version 5.4.0)
  /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk (compatibility 
version 8.5.0, current version 8.5.7)
  /System/Library/Frameworks/Tcl.framework/Versions/8.5/Tcl 
(compatibility version 8.5.0, current version 8.5.7)
  /usr/lib/libffi.dylib (compatibility version 1.0.0, current version 
1.0.0)
  /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 
1.0.0)

compared to `otool -L ~/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby`

/Users/mpapis/.sm/pkg/versions/tokaidoapp/1.9.3-p392/bin/ruby:
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 125.2.11)
  /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 
227.0.0)

What is the preferred way to compile static ruby (with minimal external 
dependencies) on systems like OSX which do not provide default package 
manager so no default library paths can be assumed.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.