Я не могу найти lib для ссылки - PullRequest
1 голос
/ 29 июля 2010

Ниже приведен пример для описания моей проблемы:

ld -Lpath1 -Lpath2 -lA -lB -Xlinker -T -Xlinker \
    -W1,-rpath,/usr/local/lib -l-o target
ld: cannot find -lA
collect2: ld returned 2 exit status

И path1, и path2 являются относительными путями, и я могу найти библиотеку A в соответствии с pwd ld, так почему же ld вывел этоошибка msg?

Может ли кто-нибудь дать мне несколько советов по устранению этой проблемы?

Мне не хватает некоторых, перед библиотекой с именем rt.

стоит "-static".Ваше предложение, я пытаюсь позволить gcc управлять ld для выполнения процесса линковки.gcc Ao Bo -mabi = 64 -static -lrt -Xlinker -T -Xlinker ld.script -W1, -rpath, / usr / local / lib -lmemdbg -o цель - это не работает.

изатем я удаляю опцию "-static" и другую динамическую библиотеку после -lpthread (потому что rt зависит от pthread, который обнаруживается при удалении "-static")

gcc Ao Bo -mabi = 64 -lrt-lpthread -Xlinker -T -Xlinker ld.script -W1, -rpath, / usr / local / lib -lmemdbg -o target и на этот раз объекты успешно связаны друг с другом.

и затем я пытаюсьвыясните, почему команда "-static" не работает, передав "-v" в gcc.появилась какая-то опция "-L", и я нашел в списке поиска библиотеку с именем librt.a.

Я действительно запутался.версия gcc - 4.3

1 Ответ

1 голос
/ 29 июля 2010

Существуют различные проблемы, которые могут быть факторами:

  • Какое имя вы ищете? path1/libA.a? path1/libA.so
  • Параметр -W1, вероятно, должен быть -Wl, но это не будет учитывать ошибку ссылки.
  • Опция -l-o, вероятно, должна состоять из двух опций с аргументом для опции -l (если у вас нет библиотеки lib-o.a или lib-o.so).
  • Обычно вы указываете хотя бы один объектный файл вашего собственного устройства; main() предоставляет вам только библиотеки Lex / Yacc (из тех, что мне известны) - и только в классических системах Unix, а не в Linux.
  • Если библиотечные файлы существуют там, где, как вы думаете, они существуют, правильный ли это тип? То есть, если вы создаете 32-битную программу, это могут быть 64-битные библиотеки или наоборот? Они для вашего оборудования? (Обычно я ожидаю, что компоновщик скажет что-то более подходящее, чем «не могу найти», но это может быть проблемой.)
  • Вы проверили разрешения для файлов библиотеки и каталогов?
  • Не лучше ли вызывать загрузчик напрямую, а использовать компилятор для его запуска? Мой опыт показывает, что компилятор знает о правильном вызове загрузчика больше, чем я, и я видел, что больше людей приходят к горестью при создании общих объектов, когда они используют ld напрямую, чем при использовании вместо этого компилятора.
...