-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Compiling fails after the introduction of https://github.com/kwilczynski/ruby-magic/pull/2 #6
Comments
I had this, and found it was caused by my ruby (installed via ruby-install) not being compiled with Running:
was enough to generate the required libruby.so and fix linking:
(previously, I only had the |
Seems I have the same problem. This does make me wonder if this should be necessary in the first place. I think this is the first C extension I've come across that requires a shared Ruby library to be available. |
Arch Linux at least compiles with this option by default: https://github.com/archlinux/svntogit-packages/blob/packages/ruby/trunk/PKGBUILD. I guess it's not too weird to require that, though I'm still curious as to why this Gem needs a shared library. |
Hi @yorickpeterse, apologies for issues! I need to have a closer look. I am able to build it on macOS and on Linux machine running Debian. It also seems fine when building on Ubuntu provided by Travis CI. This is surprising, as I would expect issues with I personally use Having said that, this might be a side-effect of building If you have Just an idea to exclude the recent changes as a possible culprit. Krzysztof |
Seems to work here. |
|
#5 is coming along and statically links Ruby does appear to have support for compiling a gem as a static library: https://github.com/ruby/ruby/blob/cc8e966e3c8b44dd946c4c50cc8d172e1d45e625/lib/mkmf.rb#L2495-L2497. I'm not sure the conditions this is enabled. I've noticed adding |
Hi @yorickpeterse, With #5 now merged (thank you again @stanhu for all the work), do you still have issues building and/or installing? If you have a moment, would you be able to check again? Thank you in advance! Krzysztof |
@kwilczynski Using the latest |
…ic-static fix `undefined reference` building error when installing ruby-magic-static in building `gitlab`. see also kwilczynski/ruby-magic#6.
It looks like docker-gitlab also needed to add |
I replicated the problem by compiling a Ruby interpreter without I'm not sure why the linker is requiring these
The compilation step looks similar: gcc -shared -o nokogiri.so html_document.o html_element_description.o html_entity_lookup.o html_sax_parser_context.o html_sax_push_parser.o libxml2_backwards_compat.o nokogiri.o test_global_handlers.o xml_
attr.o xml_attribute_decl.o xml_cdata.o xml_comment.o xml_document.o xml_document_fragment.o xml_dtd.o xml_element_content.o xml_element_decl.o xml_encoding_handler.o xml_entity_decl.o xml_entity_reference
.o xml_namespace.o xml_node.o xml_node_set.o xml_processing_instruction.o xml_reader.o xml_relax_ng.o xml_sax_parser.o xml_sax_parser_context.o xml_sax_push_parser.o xml_schema.o xml_syntax_error.o xml_tex
t.o xml_xpath_context.o xslt_stylesheet.o -L. -L/usr/local/lib -Wl,-rpath,/usr/local/lib -L/usr/local/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxml2/2.9.10/lib -Wl,-rpath,/usr/l
ocal/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxml2/2.9.10/lib -L/usr/local/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxslt/1.1.34/lib -Wl,-rpath,/usr
/local/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxslt/1.1.34/lib -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--compress-debug-sections=zlib /usr/local/lib/
ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxslt/1.1.34/lib/libexslt.a -lm -ldl -lz /usr/local/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxml2/2.9.10/lib/li
bxml2.a /usr/local/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu/libxslt/1.1.34/lib/libxslt.a -ldl -lm -lz /usr/local/lib/ruby/gems/2.7.0/gems/nokogiri-1.11.2/ports/x86_64-pc-linux-gnu
/libxml2/2.9.10/lib/libxml2.a -lm -lc ruby-magic has a few more items:
Here's the compile step failing in gcc -shared -o magic.so functions.o ruby-magic.o -L. -L/usr/local/lib -Wl,-rpath,/usr/local/lib -L/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -Wl,-rpath,/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -Wl,--as-needed -Wl,--no-undefined -Wl,--exclude-libs,ALL -Wl,--compress-debug-sections=zlib -lmagic -lm -lc -L/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -lmagic -lz /tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib/libmagic.a |
Attempting to add gcc -shared -o magic.so functions.o ruby-magic.o -L. -L/usr/local/lib -Wl,-rpath,/usr/local/lib -L/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -Wl,-rpath,/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/tmp/ruby-magic/ports/x86_64-pc-linux-gnu/libmagic/5.39/lib -Wl,--as-needed -Wl,--no-undefined -Wl,--exclude-libs,ALL -Wl,--compress-debug-sections=zlib -lmagic -lm -lc -lruby-static -fPIC -lm
/usr/bin/ld: /usr/local/lib/libruby-static.a(error.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(gc.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(hash.o): relocation R_X86_64_PC32 against symbol `environ@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(io.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(mjit.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(mjit_compile.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(thread.o): relocation R_X86_64_PC32 against symbol `__libc_stack_end@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(transient_heap.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(version.o): relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(vm.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(vm_backtrace.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(vm_dump.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(setproctitle.o): relocation R_X86_64_PC32 against symbol `environ@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(addr2line.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(compile.o): relocation R_X86_64_PC32 against symbol `stdout@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/local/lib/libruby-static.a(debug.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: nonrepresentable section on output The presence of |
Hi @stanhu, The culprit here most likely will be the We add it here: ruby-magic/ext/magic/extconf.rb Lines 274 to 276 in b8ffc70
Krzysztof |
Ah, thanks, I confirmed that fixes the problem. Can we just drop those lines? |
The linker flag `-Wl,--no-undefined` was causing ruby-magic compilation to fail with undefined refrences to Ruby methods (e.g. `rb_warn`). This enforcement prevented ruby-magic from being compiled with a Ruby interpreter that did not have `--enabled-shared` set up by default. Closes kwilczynski#6
Hi @stanhu,
We certainly can. I would imagine all the symbols are there and things will resolve when Krzysztof |
Hi @stanhu, Thank you for digging into this problem and fixing it! Krzysztof |
The linker flag `-Wl,--no-undefined` was causing ruby-magic compilation to fail with undefined refrences to Ruby methods (e.g. `rb_warn`). This enforcement prevented ruby-magic from being compiled with a Ruby interpreter that did not have `--enabled-shared` set up by default. Closes #6
This MR removed the following line:
On my Arch Linux installation this is now leading to the following compile error:
It seems that this change, for whatever reason, is resulting in the right headers not being found? I'm not sure yet what's going on exactly.
The text was updated successfully, but these errors were encountered: