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