Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
716 views
in Technique[技术] by (71.8m points)

ruby - gem install pg can not bind to libpq

After upgrading to Ruby 1.9.3 (from 1.9.2 using system RVM) on Ubuntu 10.04.3, I removed all of my gems, and attempted to reinstall pg (ala bundle install pg).

It then threw an error and informed me that I should look at mkmf.log, both of which are included in this gist: https://gist.github.com/d05a81701d968895c730

libpq-dev, libpq5, and postgresql-client are all installed and working correctly. Pointing gem at pg_config, and the include and bin directories directly does not appear to change anything.

I've seen several questions about similar error messages around stackoverflow, and the rest of the web, but they all appear to be simple missing dependency issues (most of them are solved by installing libpq-dev), so I'm at a bit of a loss.

Various other properties that might be useful / relevant:

  • ruby 1.9.3p0 (2011-10-30 revision 33570) [i686-linux]
  • rvm 1.10.1 (system)
  • gem 1.8.15
  • psql (PostgreSQL) 8.4.9

Thanks in advance.

gem_make.out:

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /usr/local/rvm/rubies/ruby-1.9.3-p0/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** 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.

ldd.stdout:

$ldd /usr/lib/libpq.so
    linux-gate.so.1 =>  (0xf57fe000)
    libssl.so.0.9.8 => /lib/i686/cmov/libssl.so.0.9.8 (0xb77f4000)
    libcrypto.so.0.9.8 => /lib/i686/cmov/libcrypto.so.0.9.8 (0xb76a2000)
    libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb75f1000)
    libcom_err.so.2 => /lib/libcom_err.so.2 (0xb75ec000)
    libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb75bd000)
    libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb758b000)
    libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0xb7544000)
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb752b000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb73d0000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb73cc000)
    libz.so.1 => /lib/libz.so.1 (0xb73b7000)
    libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7393000)
    libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb738b000)
    libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb7386000)
    libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb7372000)
    /lib/ld-linux.so.2 (0xb786a000)
    liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0xb7365000)
    libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0xb734d000)
    libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0xb72b2000)
    libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0xb72a0000)
    libgcrypt.so.11 => /lib/libgcrypt.so.11 (0xb722d000)
    libgpg-error.so.0 => /lib/libgpg-error.so.0 (0xb7228000)

pgconfig.stdout:

$pg_config --ldflags --libs

-Wl,-Bsymbolic-functions -Wl,--as-needed -Wl,--as-needed
-lpgport -lxslt -lxml2 -lpam -lssl -lcrypto -lkrb5 -lcom_err -lgssapi_krb5 -lz -lreadline -lcrypt -ldl -lm 

mkmf.log:

find_executable: checking for pg_config... -------------------- yes

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

find_header: checking for libpq-fe.h... -------------------- yes

"gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include  -D_FILE_OFFSET_BITS=64  -I/usr/include/postgresql  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration  -fPIC conftest.c  -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L.  -rdynamic -Wl,-export-dynamic -L/usr/lib     -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby  -lpthread -lrt -ldl -lcrypt -lm   -lc"
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: int main() {return 0;}
/* end */

"gcc -E -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include  -D_FILE_OFFSET_BITS=64  -I/usr/include/postgresql  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration  -fPIC  conftest.c -o conftest.i"
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: #include <libpq-fe.h>
/* end */

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

find_header: checking for libpq/libpq-fs.h... -------------------- yes

"gcc -E -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include  -D_FILE_OFFSET_BITS=64  -I/usr/include/postgresql  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration  -fPIC  conftest.c -o conftest.i"
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: #include <libpq/libpq-fs.h>
/* end */

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

have_library: checking for PQconnectdb() in -lpq... -------------------- no

"gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include  -D_FILE_OFFSET_BITS=64  -I/usr/include/postgresql  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration  -fPIC conftest.c  -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L.  -rdynamic -Wl,-export-dynamic -L/usr/lib     -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lpq  -lpthread -lrt -ldl -lcrypt -lm   -lc"
/usr/lib/libpq.so: undefined reference to `X509_STORE_set_flags@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `CRYPTO_set_locking_callback@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ENGINE_init@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ENGINE_free@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ENGINE_load_private_key@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ENGINE_finish@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `X509_check_private_key@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `X509_free@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_CTX_new@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_pending@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `TLSv1_method@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `X509_STORE_load_locations@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_CTX_set_verify@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ERR_pop_to_mark@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_new@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_get_error@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ERR_get_error@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ENGINE_by_id@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_write@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_load_error_strings@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_CTX_load_verify_locations@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `BIO_ctrl@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `PEM_read_bio_PrivateKey@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `CRYPTO_set_id_callback@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_free@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `BIO_free@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_CTX_get_cert_store@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `X509_get_subject_name@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_shutdown@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_CTX_set_client_cert_cb@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `PEM_read_bio_X509@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ERR_set_mark@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `OPENSSL_config@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `X509_NAME_get_text_by_NID@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_read@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_CTX_ctrl@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `ERR_reason_error_string@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_get_peer_certificate@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `X509_NAME_oneline@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_set_ex_data@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_set_fd@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_library_init@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `CRYPTO_num_locks@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_get_ex_data@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `SSL_connect@OPENSSL_0.9.8'
/usr/lib/libpq.so: undefined reference to `BIO_new_file@OPENSSL_0.9.8'
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: #include <libpq-fe.h>
4: 
5: /*top*/
6: int main() {return 0;}
7: int t() { void ((*volatile p)()); p = (void ((*)()))PQconnectdb; return 0; }
/* end */

"gcc -o conftest -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/i686-linux -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1/ruby/backward -I/usr/local/rvm/rubies/ruby-1.9.3-p0/include/ruby-1.9.1 -I. -I/usr/local/rvm/usr/include  -D_FILE_OFFSET_BITS=64  -I/usr/include/postgresql  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration  -fPIC conftest.c  -L. -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -Wl,-R/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/usr/lib -Wl,-R/usr/local/rvm/usr/lib -L.  -rdynamic -Wl,-export-dynamic -L/usr/lib     -Wl,-R -Wl,/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -L/usr/local/rvm/rubies/ruby-1.9.3-p0/lib -lruby -lpq  -lpthread -lrt -ldl -lcrypt -lm   -lc"
conftest.c: In function 't':
conftest.c:7: error: too few arguments to function 'PQconnectdb'
checked program was:
/* begin */
1: #include "ruby.h"

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I've got the same problem in my case was lib's inside .rvm/usr/lib which was taken to this compilation instead of lib's from system. I'm not sure why that happens and why it doesn't work (in my case on Ubuntu 10.04 x86_64) but to solve it just :

 mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm

for a while or forever ;)

If someone will investigate why that happen I will be appreciate. Regards.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...