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

3ec52ed58eb92026d86e62c39bdb7589?d=identicon&s=25 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.
F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 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.
F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 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.
3ec52ed58eb92026d86e62c39bdb7589?d=identicon&s=25 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.
E7cff3cfd41c495e1012227d7dc24202?d=identicon&s=25 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.
3ec52ed58eb92026d86e62c39bdb7589?d=identicon&s=25 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.
3ec52ed58eb92026d86e62c39bdb7589?d=identicon&s=25 Michal Papis (mpapis)
on 2013-07-25 02:55
(Received via mailing list)
Issue #7948 has been updated by mpapis (Michal Papis).


confirmed it again - compiling with `LDFLAGS=-Bstatic` +
`--with-static-linked-ext` and without: `--enable-load-relative` works
as expected - this two flags can not be used together.
----------------------------------------
Bug #7948: Can not compile pseudo static Ruby binary on OSX
https://bugs.ruby-lang.org/issues/7948#change-40657

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.
3ec52ed58eb92026d86e62c39bdb7589?d=identicon&s=25 Michal Papis (mpapis)
on 2013-08-02 03:38
(Received via mailing list)
Issue #7948 has been updated by mpapis (Michal Papis).


=begin
Is it possible that http://www.rubyist.net/~eban/goto/r42213 is reason
of:

 make[2]: *** No rule to make target `static'.  Stop.
 make[1]: *** [ext/-test-/win32/dln/static] Error 2

where
(({/Users/mpapis/.rvm/src/ruby-2.0.0-p247/ext/-test-/win32/dln/mkmf.log})):

 Failed to configure -test-/win32/dln. It will not be installed.

=end

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

Author: mpapis (Michal Papis)
Status: Assigned
Priority: Normal
Assignee: nagachika (Tomoyuki Chikanaga)
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.
3ec52ed58eb92026d86e62c39bdb7589?d=identicon&s=25 Michal Papis (mpapis)
on 2013-08-02 09:15
(Received via mailing list)
Issue #7948 has been updated by mpapis (Michal Papis).


=begin
confirming that for static extensions ((({--with-static-linked-ext})))
it is required to ignore extensions that fail, for me on OSX it was:

 --with-out-ext=dl/win32,fiddle/win32,tk/tkutil,win32ole,-test-/win32/dln,-test-/win32/fd_setsize

which makes the static ruby compilation two step pass process:

 make | grep "^Failed to configure"
 ./configure --with-out-ext=...,...,...
 make

this is related to the change http://www.rubyist.net/~eban/goto/r42213 -
can we make the "Fail"s to be ignored from static compilation list?
=end

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

Author: mpapis (Michal Papis)
Status: Assigned
Priority: Normal
Assignee: nagachika (Tomoyuki Chikanaga)
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.
This topic is locked and can not be replied to.