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