kubo / ruby-oci8

Ruby-oci8 - Oracle interface for ruby
Other
169 stars 75 forks source link

Unable to install on Mac OS Sierra 10.12.1 #160

Closed sylvainsf closed 7 years ago

sylvainsf commented 7 years ago

I've followed the guides for both manually installing to /opt/oracle, and to install using homebrew, neither of which solved the issue. It appears that the compiler is not being passed the DYLD_LIBRARY_PATH as it's clearly set to /usr/local/lib on my system but make is reporting it unset. Debug info below:

gem install ruby-oci8 -v '2.1.8'
Building native extensions.  This could take a while...
ERROR:  Error installing ruby-oci8:
    ERROR: Failed to build gem native extension.

    current directory: /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8
/Users/sylvain/.rvm/rubies/ruby-2.3.0/bin/ruby -r ./siteconf20170208-25929-1d4y1tp.rb extconf.rb
checking for load library path...
  DYLD_LIBRARY_PATH is not set.
checking for cc... ok
checking for gcc... yes
checking for LP64... yes
checking for sys/types.h... yes
checking for ruby header... ok
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/sylvain/.rvm/rubies/ruby-2.3.0/bin/$(RUBY_BASE_NAME)
    --with-instant-client
    --without-instant-client
/Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:891:in `get_home': RuntimeError (RuntimeError)
    from /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:707:in `initialize'
    from /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:320:in `new'
    from /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:320:in `get'
    from extconf.rb:18:in `<main>'
---------------------------------------------------
Error Message:
  Set the environment variable ORACLE_HOME if Oracle Full Client.
  Append the path of Oracle client libraries to DYLD_LIBRARY_PATH if Oracle Instant Client.

Backtrace:
  /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:891:in `get_home'
  /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:707:in `initialize'
  /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:320:in `new'
  /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8/ext/oci8/oraconf.rb:320:in `get'
  extconf.rb:18:in `<main>'
---------------------------------------------------
See:
 * http://rubydoc.info/gems/ruby-oci8/file/docs/install-full-client.md for Oracle full client
 * http://rubydoc.info/gems/ruby-oci8/file/docs/install-instant-client.md for Oracle instant client
 * http://ruby-oci8.rubyforge.org/en/file.report-installation-issue.html to report an issue.

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/extensions/x86_64-darwin-16/2.3.0/ruby-oci8-2.1.8/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/gems/ruby-oci8-2.1.8 for inspection.
Results logged to /Users/sylvain/.rvm/gems/ruby-2.3.0@orphan-receipts/extensions/x86_64-darwin-16/2.3.0/ruby-oci8-2.1.8/gem_make.out

tail -100 mkmf.log:

"gcc -o conftest -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-darwin16 -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.  -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens  -fno-common -pipe conftest.c  -L. -L/Users/sylvain/.rvm/rubies/ruby-2.3.0/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib     -lruby.2.3.0  -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main(int argc, char **argv)
4: {
5:   return 0;
6: }
/* end */

"gcc -o conftest -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-darwin16 -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.  -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens  -fno-common -pipe conftest.c  -L. -L/Users/sylvain/.rvm/rubies/ruby-2.3.0/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib     -lruby.2.3.0  -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main() { return 0; }
/* end */

./conftest
"gcc -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-darwin16 -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.  -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens  -fno-common -pipe   -c conftest.c"
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: /*top*/
4: #ifndef __GNUC__
5: # error
6: |:/ === __GNUC__ undefined === /:|
7: #endif
/* end */

"gcc -o conftest -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-darwin16 -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.  -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens  -fno-common -pipe conftest.c  -L. -L/Users/sylvain/.rvm/rubies/ruby-2.3.0/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib     -lruby.2.3.0  -lpthread -ldl -lobjc "
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: int main() { return sizeof(long) == 8 ? 0 : 1; }
/* end */

./conftest
have_header: checking for sys/types.h... -------------------- yes

"gcc -E -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/x86_64-darwin16 -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0/ruby/backward -I/Users/sylvain/.rvm/rubies/ruby-2.3.0/include/ruby-2.3.0 -I.  -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -I/usr/local/opt/libyaml/include -I/usr/local/opt/readline/include -I/usr/local/opt/libksba/include -I/usr/local/opt/openssl/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens  -fno-common -pipe  conftest.c -o conftest.i"
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <sys/types.h>
/* end */

--------------------

file which ruby ruby --version ruby -r rbconfig -e "p RbConfig::CONFIG['host']" ruby -r rbconfig -e "p RbConfig::CONFIG['CC']" ruby -r rbconfig -e "p RbConfig::CONFIG['CFLAGS']" ruby -r rbconfig -e "p RbConfig::CONFIG['LDSHARED']" ruby -r rbconfig -e "p RbConfig::CONFIG['LDFLAGS']" ruby -r rbconfig -e "p RbConfig::CONFIG['DLDLAGS']" ruby -r rbconfig -e "p RbConfig::CONFIG['LIBS']" ruby -r rbconfig -e "p RbConfig::CONFIG['GNU_LD']"

/Users/sylvain/.rvm/rubies/ruby-2.3.0/bin/ruby: Mach-O 64-bit executable x86_64
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin16]
"x86_64-apple-darwin16.1.0"
"gcc"
" -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -Wdivision-by-zero -Wdeprecated-declarations -Wextra-tokens  -fno-common -pipe"
"gcc -dynamic -bundle"
"-L. -fstack-protector -L/usr/local/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/libyaml/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/libksba/lib -L/usr/local/opt/openssl/lib"
nil
"-lpthread -ldl -lobjc"
"no"
gcc --print-prog-name=ld
 gcc --print-prog-name=as
/Library/Developer/CommandLineTools/usr/bin/ld
/Library/Developer/CommandLineTools/usr/bin/as
file /opt/oracle/instantclient_12_1/libclntsh.*
/opt/oracle/instantclient_12_1/libclntsh.dylib:      Mach-O 64-bit dynamically linked shared library x86_64
/opt/oracle/instantclient_12_1/libclntsh.dylib.12.1: Mach-O 64-bit dynamically linked shared library x86_64
/opt/oracle/instantclient_12_1/libclntsh.so:         Mach-O 64-bit dynamically linked shared library x86_64
echo $DYLD_LIBRARY_PATH
/opt/oracle/instantclient_12_1
antislice commented 7 years ago

Similar system to you, and yesterday I didn't need to set DYLD_LIBRARY_PATH, but I did set OCI_DIR, which you don't say if you set.

sylvainsf commented 7 years ago

@antislice I just tried setting OCI_DIR, same result.

kubo commented 7 years ago

@sylvainsf Could you use latest ruby-oci8? ruby-oci8 2.1.8 doesn't support OS X 10.11 or later.

If you need to use ruby-oci8 2.1.8, replace oraconf.rb with the latest.

  1. download ruby-oci8-2.1.8.tar.gz and ruby-oci8-2.2.3.tar.gz.
  2. Create a ruby-oci8 gem file.
    $ tar xvfz ruby-oci8-2.1.8.tar.gz
    $ tar xvfz ruby-oci8-2.2.3.tar.gz ruby-oci8-2.2.3/ext/oci8/oraconf.rb
    $ cd ruby-oci8-2.1.8
    $ cp ../ruby-oci8-2.2.3/ext/oci8/oraconf.rb ext/oci8  # replace oraconf.rb
    $ gem build ruby-oci8.gemspec # create ruby-oci8-2.1.8.gem
  3. Install the created gem.
    
    $ export OCI_DIR=/opt/oracle/instantclient_12_1
    $ gem install ./ruby-oci8-2.1.8.gem
sylvainsf commented 7 years ago

@kubo Thanks that did the trick, I am able to just use the latest.

sylvainsf commented 7 years ago

Just as an FYI the oracle_activerecord_enhanced documentation explicitly had 2.1.0 in it, my bad for not trying without the constraint.