Skip to content
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

Issues compiling when gems with native extensions present #147

Open
georgepalmer opened this issue Jan 12, 2021 · 0 comments
Open

Issues compiling when gems with native extensions present #147

georgepalmer opened this issue Jan 12, 2021 · 0 comments

Comments

@georgepalmer
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant