pmq20/ruby-packer

Issues compiling when gems with native extensions present

georgepalmer opened this issue · 0 comments

I can successfully build a project when there's no gems with native extensions, however when using native extensions running the output file crashes. I have two gems with native extensions ruby-serial and fxruby and the issues occurs if just one or both gems are present in the Gemfile.

With a native gem present I get an output file but this is also present at the end of the build output:

*** Following extensions are not compiled:
gdbm:
    Could not be configured. It will not be installed.
    Check ext/gdbm/mkmf.log for more details.

Looking at the gdbm error file (pass 1) the log has the following:

<sinpped>
"clang -o conftest -I../../.ext/include/x86_64-darwin20 -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev/include -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev/ext/gdbm -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -DRUBY_DEBUG -fPIC -O3 -fno-fast-math -ggdb3 -Os -fdata-sections -ffunction-sections -pipe  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/include  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libffi-3.2.1/include  conftest.c  -L. -L../.. -L.  -L/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib  /var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libz.a  -fstack-protector-strong -L/usr/local/lib     -lruby.2.7-static -framework Security -framework Foundation -lpthread -ldl -lobjc -lgdbm    -L.  -L/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib  /var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libz.a  -fstack-protector-strong -L/usr/local/lib "
conftest.c:14:57: error: use of undeclared identifier 'gdbm_open'
int t(void) { void ((*volatile p)()); p = (void ((*)()))gdbm_open; return !p; }
                                                        ^
1 error generated.
checked program was:
/* begin */
 1: #include "ruby.h"
 2: 
 3: /*top*/
 4: extern int t(void);
 5: int main(int argc, char **argv)
 6: {
 7:   if (argc > 1000000) {
 8:     int (* volatile tp)(void)=(int (*)(void))&t;
 9:     printf("%d", (*tp)());
10:   }
11: 
12:   return !!argv[argc];
13: }
14: int t(void) { void ((*volatile p)()); p = (void ((*)()))gdbm_open; return !p; }
/* end */

It seems there's some problem finding gdbm_open Looking at the pass2 error file it seems a similar story:

have_library: checking for gdbm_open() in -lgdbm... -------------------- no

"clang -o conftest -I../../.ext/include/x86_64-darwin20 -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev/include -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev/ext/gdbm -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -DRUBY_DEBUG -fPIC -O3 -fno-fast-math -ggdb3 -Os -fdata-sections -ffunction-sections -pipe  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/include  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libffi-3.2.1/include  conftest.c  -L. -L../.. -L.  -L/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib  /var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libz.a  -fstack-protector-strong -L/usr/local/lib     -lruby.2.7-static -framework Security -framework Foundation -lpthread -ldl -lobjc    -L.  -L/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib  /var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libz.a  -fstack-protector-strong -L/usr/local/lib "
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: int main(int argc, char **argv)
4: {
5:   return !!argv[argc];
6: }
/* end */

"clang -o conftest -I../../.ext/include/x86_64-darwin20 -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev/include -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev/ext/gdbm -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -DRUBY_DEBUG -fPIC -O3 -fno-fast-math -ggdb3 -Os -fdata-sections -ffunction-sections -pipe  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/ruby-2.7.1.dev  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/include  -I/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libffi-3.2.1/include  conftest.c  -L. -L../.. -L.  -L/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib  /var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libz.a  -fstack-protector-strong -L/usr/local/lib     -lruby.2.7-static -framework Security -framework Foundation -lpthread -ldl -lobjc -lgdbm    -L.  -L/var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib  /var/folders/nv/xhhpglzx6m97w2dv050zxtsh0000gn/T/rubyc/local/lib/libz.a  -fstack-protector-strong -L/usr/local/lib "
conftest.c:14:57: error: use of undeclared identifier 'gdbm_open'
int t(void) { void ((*volatile p)()); p = (void ((*)()))gdbm_open; return !p; }
                                                        ^
1 error generated.
checked program was:
/* begin */
 1: #include "ruby.h"
 2: 
 3: /*top*/
 4: extern int t(void);
 5: int main(int argc, char **argv)
 6: {
 7:   if (argc > 1000000) {
 8:     int (* volatile tp)(void)=(int (*)(void))&t;
 9:     printf("%d", (*tp)());
10:   }
11: 
12:   return !!argv[argc];
13: }
14: int t(void) { void ((*volatile p)()); p = (void ((*)()))gdbm_open; return !p; }
/* end */

At this point my knowledge of the gem runs out. I know there's an included GDBM and I can see gdbm_open in there so it's almost like it's not finding it. I did wonder if it could be picking up on my system GDBM instead.

Having struggled with this I tried compiling rubyc to check I wasn't missing anything it obvious. It also fails in the same way.

Let me know if you need any more details - very happy to help dig into the details here but I'm a bit out my depth with native building.

Env:
OS: Mac Os X 11.1 (Big Sur)
Gem version: latest (master branch)
GDBM: installed via brew 1.18.1_1