Bug #5532
closedCompile problem for bigdecimal on cygwin
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
Updated by mrkn (Kenta Murata) about 13 years ago
- Category set to ext
- Assignee set to mrkn (Kenta Murata)
Please attach your mkmf.log.
Updated by mrkn (Kenta Murata) about 13 years ago
linking static-library libruby191-static.a
Is your ruby really version 1.8.7?
Updated by duerst (Martin Dürst) about 13 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) about 13 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) about 13 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) about 13 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) about 13 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) about 13 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) about 13 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) about 13 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.)
Updated by phasis68 (Heesob Park) about 13 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) about 13 years ago
Yes, exactly. And the problem went away when I cd'd back to /cygdrive/c/Data/ruby/. Many thanks again!