From: jean.boussier@... Date: 2021-08-14T00:27:06+00:00 Subject: [ruby-core:104915] [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 byroot (Jean Boussier). > Not sure how byroot (Jean Boussier) or alanwu (Alan Wu) will feel about this approach, though. At the very least I'd say it's progress as my attempt to ship ruby builds with this combinations of flags would have immediately failed during the build rather than later in production. But yeah I wish I could `--disable-shared` without having to ship a huge 100MiB+ static library, but since I don't quite understand what it would take to support this combination of flags, I have no strong opinion about it. ---------------------------------------- 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-93279 * 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: