2012-10-15 3 views
1

J'ai installé Ruby/Gem/Rails sur deux machines OSX 10.8.2 différentes. L'un fonctionne bien et l'autre semble fonctionner jusqu'à ce que je tente d'installer une gemme qui inclut du code natif comme pg. Quand je faisRVM installation de Ruby pour i386 au lieu de x86_64 sous OSX 10.8.2

gem install pg -v 0.12.2 

il échoue avec un « Vous ne trouvez pas la bibliothèque cliente PostgeSQL (libpq)

Si je regarde mkmf.log je vois.

have_library: checking for PQconnectdb() in -lpq... -------------------- no "gcc-4.2 -o conftest -I/Users/brian/.rvm/rubies/ruby-1.9.3-p286/include/ruby-1.9.1/i386-darwin12.2.0 -I/Users/brian/.rvm/rubies/ruby-1.9.3-p286/include/ruby-1.9.1/ruby/backward -I/Users/brian/.rvm/rubies/ruby-1.9.3-p286/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -I/usr/include -I/Users/brian/.rvm/usr/include -fno-common -pipe conftest.c -L. -L/Users/brian/.rvm/rubies/ruby-1.9.3-p286/lib -L. -L/Users/brian/.rvm/usr/lib -L/usr/local/lib -L/usr/lib -lruby.1.9.1 -lpq -lpthread -ldl -lobjc " ld: warning: ignoring file /usr/local/lib/libpq.dylib, file was built for unsupported file format (0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0) which is not the architecture being linked (i386): /usr/local/lib/libpq.dylib Undefined symbols for architecture i386: "_PQconnectdb", referenced from: _t in ccLXteQk.o

Je crois que cela est provoqué parce que la bibliothèque qui est ignorée est une bibliothèque 64 bits (comme je le veux) mais mon installation de ruby ​​est de 32 bits (pour une raison quelconque.) Comme preuve, sur la machine qui fonctionne je vois

~/.rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/x86_64-darwin12.2.0/ruby/config.h 

sur celui qui ne

~/.rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/i386-darwin12.2.0/ruby/config.h 

Désolé pour la longue explication. J'ai essayé beaucoup de choses pour essayer de définir l'architecture pour

rvm install 1.9.3 

qui produit ces répertoires. Aucun de mes efforts n'a induit la "mauvaise" machine à produire un répertoire d'inclusion en accord avec un binaire 64 bits désiré. Je n'ai pas sciemment défini l'architecture sur l'une ou l'autre de ces versions, ce qui me laisse perplexe à ce stade. Dans l'environnement de la "mauvaise" machine, l'installation de ruby ​​pense qu'elle devrait construire des binaires 32 bits. Des idées?

+0

Que signifie ~/.rvmrc ressemblent à celui qui est défaillant? – echristopherson

+0

Aucune machine ne possédait un fichier .rvmrc mais j'en ai créé un à un moment donné sur la machine défaillante pour tenter de le faire. Bien que cela n'ait pas changé le résultat, ce fichier - que j'ai créé à la main - n'a que cette ligne: rvm_archflags = "- arch x86_64" – Gooberholtzer

Répondre

0

Vous pouvez transmettre vos drapeaux d'arche à ce que je crois. Comme gem install pg -- --arch-flags='i386'

ou tout ce que pg accepte pour les drapeaux arqués. Devrait également être un drapeau, vous pouvez passer pour définir le type d'arc (l'amenant à constater que)

Vous pouvez aussi dire gem install pg -- --with-pg-include=/path/to/pg/include --with-pg-dir=/path/to/pg_config

+0

Je vais réessayer la première suggestion que vous partagez car elle est la plus proche de ce dont j'ai besoin crois que le problème de base est de retour avec l'installation de Ruby comme point de départ. Il y a un fichier d'en-tête (config.h) qui contient des définitions 32 bits (i386) et je n'ai pas pu empêcher cela d'être généré lors de l'exécution de RVM pour installer Ruby. – Gooberholtzer

+0

Ensuite, si vous avez besoin de construire un rubis 32 bits, encore une fois, utilisez le paramètre ARCHFLAGS manuellement en les passant au processus de construction. Vous pouvez même vous assurer que c'est la valeur par défaut en ajoutant '' '' '' rvm_archflags = "- arch i386" '' 'à votre fichier' '' $ HOME/.rvmrc''' qui s'appliquera à toutes les futures générations. Vous dites que vous avez déjà ajouté ce fichier, mais vous avez ajouté les mauvais paramètres de drapeau arch pour que tout reste par défaut à 64 bits. – ddd

+0

Merci encore - L'installation de ruby ​​est une installation 32 bits mais ce n'est pas ce que je veux. Je veux des builds 64 bits. Je suis sur la compréhension que i386 est 32 bits et x86_64 est le drapeau 64 bits. Quelque chose dans la communication semble être peut-être que je n'ai pas été clair ou que j'ai mal compris votre direction. – Gooberholtzer