Как я могу сказать, какое libstdc ++ хочет двойное преобразование? - PullRequest
2 голосов
/ 14 октября 2011

Вот ошибка, которую я вижу при попытке загрузить файл .hs в ghci.

>Loading package http-enumerator-0.7.1.1 ... linking ... done.
>Loading package double-conversion-0.2.0.1 ... can't load .so/.DLL for: stdc++ ?>>>     (libstdc++.so: cannot open shared object file: No such file or directory)

Дальнейшие исследования показывают, что у меня установлено несколько библиотек stdc ++

>locate libstdc++.so
>/usr/lib/libstdc++.so.6
>/usr/lib/libstdc++.so.6.0.14
>/usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so
>/usr/lib32/libstdc++.so.6
>/usr/lib32/libstdc++.so.6.0.14

Я подумал, что, возможно, яможет сделать символическую ссылку на то, что он хочет, но я понятия не имею, какой.Я использую эту ОС 2.6.35-22-сервер # 33-Ubuntu SMP Sun 19 сентября 20:48:58 UTC 2010 x86_64 GNU / Linux

Как я могу точно сказать, чего он хочет?

Ответы [ 3 ]

1 голос
/ 14 октября 2011

/usr/lib/libstdc++.so.6 должно быть символической ссылкой на /usr/lib/libstdc++.so.6.0.14. Это, вероятно, та версия, которая вам нужна.

/usr/lib32/libstdc++.so.6 должно быть символической ссылкой на /usr/lib32/libstdc++.so.6.0.14, они предназначены для 32-битных программ, обычно они вам не нужны.

/usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so это проблема.

double-conversion-0.2.0.1, вероятно, связан с ним, и ghci не может его найти. Обычно все должно быть связано с libstdc++.so.6, а не libstdc++.so без суффикса версии.

Я думаю, ни у кого не должно быть версии 1020 * вообще нигде в системе. (Например, на моем Gentoo Box нет ни одного.) Это опасно, так как разные основные версии libstdc++ обычно двоично несовместимы. Попробуйте удалить библиотеку из-под /usr/lib/gcc/, затем переустановить gcc и посмотреть, будет ли она установлена ​​снова.

Если он действительно установлен, то символическая ссылка с именем /usr/lib/libstdc++.so, указывающая на /usr/lib/libstdc++.so.6 , должна решить эту проблему. Я не уверен, что это был бы правильный способ решить это в долгосрочной перспективе.

Это то, что я обнаружил в ходе экспериментов с моей собственной коробкой Linux. Я не специалист по Ubuntu, он может отличаться от других Linux.

1 голос
/ 28 октября 2011

Чтобы обойти проблему на 64-битной Fedora 16:

sudo ln -si /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so
1 голос
/ 14 октября 2011

Значения в /usr/lib символическая ссылка на один файл:

$ ls -l libstdc++*
lrwxrwxrwx 1 root root      19 2011-09-24 22:14 libstdc++.so.6 -> libstdc++.so.6.0.13
-rw-r--r-- 1 root root 1044112 2010-03-26 20:16 libstdc++.so.6.0.13

Просто запустите:

sudo ln -si /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so

и должно работать.

...