Ошибка компиляции Ruby eventmachine - PullRequest
2 голосов
/ 05 ноября 2011

Я получаю следующее сообщение об ошибке при компиляции eventmachine 0.12.10 на ruby 1.9.2-p290:

g++ -shared -o rubyeventmachine.so binder.o cmain.o cplusplus.o ed.o em.o emwin.o epoll.o files.o kb.o page.o pipe.o rubymain.o sigs.o ssl.o -L. -L/home/git/.rvm/rubies/ruby-1.9.2-p290/lib -Wl,-R/home/git/.rvm/rubies/ruby-1.9.2-p290/lib -L.  -rdynamic -Wl,-export-dynamic    -Wl,-R -Wl,/home/git/.rvm/rubies/ruby-1.9.2-p290/lib -L/home/git/.rvm/rubies/ruby-1.9.2-p290/lib -lruby  -lssl -lcrypto   -lpthread -lrt -ldl -lcrypt -lm   -lc
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a(functexcept.o): relocation         R_X86_64_32 against `std::bad_typeid::~bad_typeid()' can not be used when making a shared     object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a: could not read symbols: Bad value
collect2: ld returned 1 exit status

Это делается на машине с Linux, работающей под управлением debian squeeze.

Есть предложения?Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 15 июня 2012

У меня была похожая проблема при попытке собрать mosh-1.2.2 на стандартной установке Debian Squeeze. У меня сработало следующее:

# cd /usr/lib/gcc/x86_64-linux-gnu/4.4.5
# rm libstdc++.so
# ln -s ../../../x86_64-linux-gnu/libstdc++.so.6 libstdc++.so

Чтобы объяснить более подробно, существующая символическая ссылка указывала на несуществующий файл:

# cd /usr/lib/gcc/x86_64-linux-gnu/4.4.5
# ls -l libstdc++.so
..
lrwxrwxrwx 1 root root      23 May  3  2011 libstdc++.so -> ../../../libstdc++.so.6
..

Я нашел правильное местоположение файла

# dpkg -S 'libstdc'
..
libstdc++6: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
..

Затем восстановил символическую ссылку, как описано в первом сегменте кода.

Ошибка, которую я получил во время компиляции:

make[3]: *** [mosh-client] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a(functexcept.o): relocation R_X86_64_32 against `std::bad_typeid::~bad_typeid()' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a: could not read symbols: Bad value

Понятия не имею, как сломался этот конкретный сервер сжатия Debian. Я без проблем компилировал на других системах сжатия.

0 голосов
/ 25 сентября 2015

обновление до ruby ​​2.2.3 решило проблему для меня

$ gcc -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-3)
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)
0 голосов
/ 29 февраля 2012

У меня возникла такая же проблема при попытке установить ree 1.8.7-2012.02 с rvm или therubyracer 0.9.9. Последний комментарий, который вы написали, дает мне возможность исправить это, я просто использую следующую команду для обновления g ++ до тестовой версии:

sudo apt-get install -t wheezy g++

Дополнительную информацию о том, как хранить систему debian с пакетами из разных выпусков, можно найти в документе debian Как сохранить смешанную систему

0 голосов
/ 06 ноября 2011

Ваша gcc установка неверна.

В частности, у вас есть libstdc++.a в /usr/lib/gcc/x86_64-linux-gnu/4.4.5/, но (очевидно) нет libstdc++.so.

Код в libstdc++.a не был создан с флагом -fPIC, поэтому вы не можете связать этот код с общей библиотекой.

...