Project

General

Profile

Actions

Bug #5532

closed

Compile problem for bigdecimal on cygwin

Added by duerst (Martin Dürst) over 12 years ago. Updated over 12 years ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
-
Backport:
[ruby-core:40602]

Description

I tried to complile the current trunk on cygwin. However, I got a compile problem in 'bigdecimal'.
It says (see below for full output):

configuring bigdecimal
checking for labs() in stdlib.h... /cygdrive/c/Data/ruby/lib/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

What kinds of development tools would be needed? I have successfully compiled Ruby many times; this is the first time I have been told I need 'development tools'.

Many thanks for your help, Martin.

Full output follows:

duerst@jougashima ~
$ cd /cygdrive/c/Data/Ruby

duerst@jougashima /cygdrive/c/Data/Ruby
$ make
CC = gcc
LD = ld
LDSHARED = gcc -shared -s
CFLAGS = -O3 -g -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration
XCFLAGS = -include ruby/config.h -include ruby/missing.h -DRUBY_EXPORT
CPPFLAGS = -I. -I.ext/include/i386-cygwin -I./include -I.
DLDFLAGS = -Wl,--enable-auto-image-base,--enable-auto-import -Wl,--out-implib=libruby191.dll.a cygruby191.def
SOLIBS = cygruby191.res.o -lpthread -lrt -ldl -lcrypt
compiling version.c
compiling dmyversion.c
linking miniruby.exe
rbconfig.rb unchanged
generating enc.mk
generating cygruby191.rc
compiling cygruby191.res.o
generating prelude.c
compiling prelude.c
linking static-library libruby191-static.a
generating cygruby191.def
linking shared-library cygruby191.dll
Creating library file: libruby191.dll.a
generating encdb.h
encdb.h unchanged
making enc
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります make[1]: enc' に対して行うべき事はありません.
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます making srcs under enc make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります
make[1]: srcs' に対して行うべき事はありません. make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます
generating transdb.h
transdb.h unchanged
making trans
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります make[1]: ./enc/trans' に対して行うべき事はありません.
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます making encs make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます configuring bigdecimal checking for labs() in stdlib.h... /cygdrive/c/Data/ruby/lib/mkmf.rb:381:in try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /cygdrive/c/Data/ruby/lib/mkmf.rb:461:in try_link0' from /cygdrive/c/Data/ruby/lib/mkmf.rb:476:in try_link'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:619:in try_func' from /cygdrive/c/Data/ruby/lib/mkmf.rb:894:in block in have_func'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:790:in block in checking_for' from /cygdrive/c/Data/ruby/lib/mkmf.rb:284:in block (2 levels) in postpone'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:254:in open' from /cygdrive/c/Data/ruby/lib/mkmf.rb:284:in block in postpone'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:254:in open' from /cygdrive/c/Data/ruby/lib/mkmf.rb:280:in postpone'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:789:in checking_for' from /cygdrive/c/Data/ruby/lib/mkmf.rb:893:in have_func'
from /cygdrive/c/Data/Ruby/ext/bigdecimal/extconf.rb:3:in <top (required)>' from ./ext/extmk.rb:174:in load'
from ./ext/extmk.rb:174:in extmake' from ./ext/extmk.rb:468:in block in '
from ./ext/extmk.rb:464:in each' from ./ext/extmk.rb:464:in '
make: *** [exts.mk] エラー 1

duerst@jougashima /cygdrive/c/Data/Ruby
$


Files

mkmf.log (668 Bytes) mkmf.log duerst (Martin Dürst), 11/01/2011 02:26 PM

Updated by mrkn (Kenta Murata) over 12 years ago

  • Category set to ext
  • Assignee set to mrkn (Kenta Murata)

Please attach your mkmf.log.

Updated by mrkn (Kenta Murata) over 12 years ago

linking static-library libruby191-static.a

Is your ruby really version 1.8.7?

Updated by duerst (Martin Dürst) over 12 years ago

mkmf.log attached. Hope this helps.

The pre-installed version of ruby, used as 'baseruby' I guess, is indeed 1.8.7.

But I'm trying to build trunk, so that's I guess where messages such as "linking static-library libruby191-static.a" come from.

Updated by mrkn (Kenta Murata) over 12 years ago

  • Assignee deleted (mrkn (Kenta Murata))
  • Target version set to 2.0.0

The following error is the matter of this issue.

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lruby191

Unfortunately, I don't know cygwin well so I cannot help you.
I'm sorry.

Updated by usa (Usaku NAKAMURA) over 12 years ago

Does this patch help you?
(Sorry, I've not tested it.)

Index: configure.in

--- configure.in (revision 33590)
+++ configure.in (working copy)
@@ -2506,8 +2506,9 @@ AS_CASE(["$target_os"],
LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
AS_CASE(["$target_os"],
[cygwin*], [

  •   RUBY_SO_NAME="cyg${RUBY_SO_NAME}"
      if test x"$enable_shared" = xyes; then
    
  •   LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll
    
  •   LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
      LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
      fi
      ],
    

Updated by usa (Usaku NAKAMURA) over 12 years ago

eban-san says that libruby191.dll.a is correct (it was cygwin team's request).
So, please ignore above patch. orz

BTW, eban-san also says that he built cygwin ruby from trunk yesterday and there was no problem.
Martin-sensei, could you show us your configure options?

Updated by nobu (Nobuyoshi Nakada) over 12 years ago

  • ruby -v changed from ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] to -

Hi,

(11/11/04 17:02), "Martin J. Dürst" wrote:

BTW, eban-san also says that he built cygwin ruby from trunk yesterday and there was no problem.
Martin-sensei, could you show us your configure options?

Are they stored somewhere? If yes, where?

In config.status file.

$ grep configure_args config.status

Or

$ make showconfig

--
Nobu Nakada

Updated by duerst (Martin Dürst) over 12 years ago

Here is my configuration:
$ make showconfig
'--with-baseruby=/usr/bin/ruby'

$ /usr/bin/ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

Updated by phasis68 (Heesob Park) over 12 years ago

I managed to reproduce this issue and found that it is due to the capital letter in the path name.

If you use capital letter in the path name like "/cygdrive/c/Data/Ruby",
in the line #157-159 of lib/mkmf.rb
topdir = File.dirname(File.dirname(FILE)) #=> "/cygdrive/c/Data/Ruby"
path = File.expand_path($0) #=> "/cygdrive/c/data/ruby/ext/extmk.rb"
$extmk = path[0, topdir.size+1] == topdir+"/" #=> false

The workaround is to avoid capital letter in the path name.

Updated by duerst (Martin Dürst) over 12 years ago

  • Status changed from Open to Closed

Hello Heesob,

Many thanks for solving this problem. You are right that it is about case differences in the path name. However, your description might be slightly misunderstood. The problem is not upper-case letters per se, but letters for which case differs from how they are stored by the OS. In my case /cygdrive/c/Data/ruby/ is correct, because Data is indeed upper-case (Windows remembers the case of a letter, but matches upper- and lowercase).

Regards, Martin.

(I'm still not able to compile completely, but I'll try to get further and open another bug if necessary.)

Actions #11

Updated by phasis68 (Heesob Park) over 12 years ago

Hi,

I noticed that the problem started when you executed "cd /cygdrive/c/Data/Ruby"
instead of "cd /cygdrive/c/Data/ruby".

Here is the test case.

$ mkdir -p /cygdrive/c/Data/ruby
$ cd /cygdrive/c/Data/Ruby

phasis@phasis-PC /cygdrive/c/Data/Ruby
$ irb
irb(main):001:0> Dir.pwd
=> "/cygdrive/c/Data/Ruby"
irb(main):002:0> File.expand_path("./test.txt")
=> "/cygdrive/c/Data/Ruby/test.txt"
irb(main):003:0> exit

phasis@phasis-PC /cygdrive/c/Data/Ruby
$ cd /cygdrive/c/Data/ruby

phasis@phasis-PC /cygdrive/c/Data/ruby
$ irb
irb(main):001:0> Dir.pwd
=> "/cygdrive/c/Data/ruby"
irb(main):002:0> File.expand_path("./test.txt")
=> "/cygdrive/c/Data/ruby/test.txt"
irb(main):003:0> exit

Notice the diffrence between "/cygdrive/c/Data/Ruby/test.txt"
and "/cygdrive/c/Data/ruby/test.txt".

Regards,
Park Heesob

Updated by duerst (Martin Dürst) over 12 years ago

Yes, exactly. And the problem went away when I cd'd back to /cygdrive/c/Data/ruby/. Many thanks again!

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0