From: Nobuyoshi Nakada Date: 2012-02-20T12:43:32+09:00 Subject: [ruby-core:42753] [ruby-trunk - Bug #5676][Closed] miniruby linking error: undefined reference to ___stack_chk_guard Issue #5676 has been updated by Nobuyoshi Nakada. Status changed from Feedback to Closed Jon Forums wrote: > I think you're right on runtime library mismatch, but shouldn't it fail when miniruby is used later in the build process, not at miniruby link time? The mismatch between the compiler and the runtime library. It can't be deferred. > 475:-lssp.0 => /usr/local/lib/gcc46/libssp.so.0 Then -fstack-protector should let gcc link that library. Try "gcc46 -dumpspecs | grep -A1 '^\*link_ssp:'", and if %{fstack-protector:} does not exist or no options is given after the colon, the spec is wrong. And you will see same error with the following simple code and -fstack-protector option, I guess: #include #include int main() {printf("%p\n", alloca(102400)); return 0;} If it's the case, this is primarily an issue of FreeBSD port. > But shouldn't gcc46's default search dirs save the link like it appears to be happening when configure (using `--with-gcc=gcc46`) executes `RUBY_TRY_CFLAGS(-fstack-protector, ...)`? It shouild be done in the spec file, as metioned above. ---------------------------------------- Bug #5676: miniruby linking error: undefined reference to ___stack_chk_guard https://bugs.ruby-lang.org/issues/5676 Author: Martin D��rst Status: Closed Priority: Normal Assignee: Motohiro KOSAKI Category: build Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2011-11-27 trunk 33861) [i386-cygwin] I get what I think is a linking error when linking miniruby. Below is a (shortened) copy of the output I get. This is on a clean checkout of trunk (using Ruby 1.8.7 as baseruby). duerst@jougashima /cygdrive/c/Data/ruby-public $ make CC = gcc LD = ld LDSHARED = gcc -shared -s CFLAGS = -O3 -g -Wall -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 -D_FORTIFY_SOURCE=2 -fstack-protector -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 -Xlinker --no-undefined SOLIBS = cygruby191.res.o -lpthread -lrt -ldl -lcrypt linking miniruby.exe dmyencoding.o: In function `set_encoding_const': /cygdrive/c/Data/ruby-public/encoding.c:1473: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/encoding.c:1520: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/encoding.c:1520: undefined reference to `___stack_chk_fail' bignum.o: In function `rb_str_to_inum': /cygdrive/c/Data/ruby-public/bignum.c:763: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/bignum.c:790: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/bignum.c:790: undefined reference to `___stack_chk_fail' dir.o: In function `dir_read': /cygdrive/c/Data/ruby-public/dir.c:569: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/dir.c:586: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/dir.c:586: undefined reference to `___stack_chk_fail' [... many more like these ...] vm_dump.o: In function `control_frame_dump': /cygdrive/c/Data/ruby-public/vm_dump.c:27: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/vm_dump.c:148: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/vm_dump.c:148: undefined reference to `___stack_chk_fail' cont.o: In function `cont_restore_0': /cygdrive/c/Data/ruby-public/cont.c:733: undefined reference to `___stack_chk_guard' unicode.o: In function `onigenc_unicode_property_name_to_ctype': /cygdrive/c/Data/ruby-public/./enc/unicode.c:2087: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/./enc/unicode.c:2114: undefined reference to `___stack_chk_guard' /cygdrive/c/Data/ruby-public/./enc/unicode.c:2114: undefined reference to `___stack_chk_fail' collect2: ld returned 1 exit status make: *** [miniruby.exe] Error 1 duerst@jougashima /cygdrive/c/Data/ruby-public $ -- http://bugs.ruby-lang.org/