Почему gcc не работает с «нераспознанной опцией командной строки -L / lusr / opt / mpfr-2.4.2 / lib»? - PullRequest
3 голосов
/ 12 февраля 2010

Мой системный администратор недавно установил новую версию GCC в /lusr/opt/gcc-4.4.3. Я проверил это следующим образом:

mike@canon:~$ cat test.c
int main(){
  return 0;
}
mike@canon:~$ gcc test.c
/lusr/opt/gcc-4.4.3/libexec/gcc/i686-pc-linux-gnu/4.4.3/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory

Сообщив моему сисадмину об этом, он сказал добавить /lusr/opt/mpfr-2.4.2/lib:/lusr/opt/gmp-4.3.2/lib к моему LD_LIBRARY_PATH. После этого я получаю следующую ошибку:

mike@canon:~$ gcc test.c
cc1: error: unrecognized command line option "-L/lusr/opt/mpfr-2.4.2/lib"

Во-первых, мой системный администратор не был полностью уверен, что это лучший обходной путь (хотя он и сказал, что он работает для него ...), так есть ли лучшее решение?

Во-вторых, почему я получаю ошибку компоновщика от cc и как ее исправить?

Некоторая информация, которая может быть полезна:

mike@canon:~$ env | grep mpfr
OLDPWD=/lusr/opt/mpfr-2.4.2/lib
LD_LIBRARY_PATH=/lusr/opt/mpfr-2.4.2/lib:/lusr/opt/gmp-4.3.2/lib:

mike@canon:~$ echo $LDFLAGS

(the above is a blank line)

Ответы [ 2 ]

1 голос
/ 23 января 2011

Я бы предложил, чтобы ваш системный администратор установил библиотеки GMP и MPFR со сборочной машины в то же место на вашей машине. (Существует также библиотека MPC, которая может вам также понадобиться.) В качестве альтернативы вашему системному администратору необходимо установить пересборку GCC - предпочтительно версии 4.5.2, поскольку она является (AFAIK) текущей - с правильными настройками, где библиотеки GMP и MPFR быть установленным на вашей машине.

Вам не нужно устанавливать LD_LIBRARY_PATH для использования GCC. Если вам нужно сделать это, это означает, что он не был создан для машины, на которой он работает. Ключевые библиотеки отсутствуют.

Чтобы продолжить отладку, вам, вероятно, понадобится:

gcc -v test.c

Это покажет вам выполненные командные строки. Нет вызова для опции -L (которая влияет на способ связывания программ) для передачи компилятору фазы 1.

0 голосов
/ 12 февраля 2010

Это похоже на какой-то сбойный аргумент gcc (он не должен жаловаться на -L foo ).

Можете ли вы попробовать установить

LD_LIBRARY_PATH=\ /lusr/opt/mpfr-2.4.2/lib:/lusr/opt/gmp-4.3.2/lib

чтобы перед этим путем к библиотеке mpfr был начальный пробел?

...