From: nobu@... Date: 2021-08-14T14:44:23+00:00 Subject: [ruby-core:104921] [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 nobu (Nobuyoshi Nakada). byroot (Jean Boussier) wrote in #note-6: > 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. With that combination, shouldn't we drop the header files too? When both libraries are not installed, all undefined symbols need to be ignored or dynamic lookup, then `have_func` and `find_library` can't work as expected. ---------------------------------------- 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-93286 * 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: