From: merch-redmine@... Date: 2021-08-13T18:22:38+00:00 Subject: [ruby-core:104913] [Ruby master Bug#18000] have_library doesn't work when ruby is compiled with --disable-shared --disable-install-static-library Issue #18000 has been updated by jeremyevans0 (Jeremy Evans). nobu (Nobuyoshi Nakada) wrote in #note-4: > We should disallow that combination, I think. > Otherwise, should drop also the headers. Here's a pull request to disallow the combination of `--disable-shared --disable-install-static-library`: https://github.com/ruby/ruby/pull/4737. Not sure how @byroot or @alanwu will feel about this approach, though. ---------------------------------------- Bug #18000: have_library doesn't work when ruby is compiled with --disable-shared --disable-install-static-library https://bugs.ruby-lang.org/issues/18000#change-93274 * Author: byroot (Jean Boussier) * Status: Open * Priority: Normal * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Related [Feature #12845] If you compile ruby with `--disable-shared --disable-install-static-library`, then many C-extension won't compile anymore. For instance `RedCloth` ```ruby # extconf.rb require 'mkmf' CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags'] $CFLAGS << ' -O0 -Wall ' if CONFIG['CC'] =~ /gcc/ dir_config("redcloth_scan") have_library("c", "main") create_makefile("redcloth_scan") ``` ``` #mkmf.log "gcc -o conftest -I/usr/local/include/ruby-3.1.0/x86_64-linux -I/usr/local/include/ruby-3.1.0/ruby/backward -I/usr/local/include/ruby-3.1.0 -I. -I/usr/local/include -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef -O0 -Wall conftest.c -L. -L/usr/local/lib -Wl,-rpath,/usr/local/lib -L. -L/usr/local/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/usr/local/lib -L/usr/local/lib -lruby-static -lz -lpthread -lrt -lrt -lgmp -ldl -lcrypt -lm -lm -lc" /usr/bin/ld: cannot find -lruby-static collect2: error: ld returned 1 exit status checked program was: /* begin */ 1: #include "ruby.h" 2: 3: int main(int argc, char **argv) 4: { 5: return !!argv[argc]; 6: } /* end */ ``` We'd like to use both flags, the first because it provide a small performance improvement, the second because `libruby-static.a` is enormous (up to 120MiB on debug builds). @alanwu says it's theoretically possible to compile with just the headers. ---Files-------------------------------- no-static-no-shared.diff (2.55 KB) rb_prefix_hack.diff (1.76 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: