2012-03-26 3 views
3

Я написал небольшое приложение на Redhat Linux 6, используя g ++ 4.4.6. После компиляции, я получил ошибкуLinux C++ linker/usr/bin/ld

/usr/bin/ld: cannot find -lcrypto 

Я сделал поиск криптографической библиотеки и найти их здесь,

[[email protected] bin]# find/-name libcrypto* 
/usr/lib64/libcrypto.so.0.9.8e 
/usr/lib64/libcrypto.so.10 
/usr/lib64/libcrypto.so.6 
/usr/lib64/libcrypto.so.1.0.0 

Мой вопрос, является ли вызвана ошибка компиляции по /USR/BIN/ld не имеет /usr/lib64/ в пути поиска? Если да, как я могу добавить его?

Спасибо.

+1

Возможный дубликат [ld не может найти существующую библиотеку] (http://stackoverflow.com/questions/335928/ld-cannot-find-an-existing-library) – ephemient

ответ

0

Вы можете предоставить каталоги для поиска библиотек в качестве параметра для gcc, как и для -L<directory_to_search_in>. И обратите внимание, что может быть несколько параметров до -L. Кроме того, вы пытаетесь построить 32-битное приложение или 64-битное?

4

При вызове gcc или ld вы должны добавить -L/usr/lib64.

Примечание. Вы также можете указать LD_LIBRARY_PATH, но это считается harmful. (Ссылка упоминает Solaris специально, но вопросы применимы к другим ОС, а также.)

Цитата:

  • LD_LIBRARY_PATH используется в предпочтении к любой момент времени выполнения или системы по умолчанию пути компоновщика. Если (не дай бог) вы установили что-то вроде/dcs/spod/baduser/lib, если в этом каталоге была взломанная версия libc (например), ваша учетная запись может быть скомпрометирована. Именно по этой причине программы set-uid полностью игнорируют LD_LIBRARY_PATH.
  • Когда код скомпилирован и зависит от этого, он может вызвать путаницу, когда разные библиотеки устанавливаются в разных каталогах, например, есть libtiff в/usr/openwin/lib и/usr/local/Lib. В этом случае прежняя библиотека является более старой, используемой некоторыми программами, которые поставляются с Solaris.
  • Иногда при использовании предварительно скомпилированных двоичных файлов они могут быть созданы с сторонними библиотеками в определенных местах; в идеале код должен либо поставляться с библиотеками, либо устанавливать его в определенное место, либо связывать код как шаг предварительной установки. Solaris 7 вводит $ ORIGIN, который позволяет указывать относительное местоположение библиотеки во время выполнения (см. Руководство по компоновщикам и библиотекам Solaris). Альтернативой является установка LD_LIBRARY_PATH для каждой программы, либо как программа-обертка для реальной программы, либо псевдоним оболочки. Однако следует отметить, что LD_LIBRARY_PATH может быть унаследованы программами, вызываемых обернутых один ...
2

Добавить каталог в /etc/ld.so.conf

затем запустить «Суд LDCONFIG», чтобы изменения вступили в силу.

5

Нет, вы, вероятно, неправильно указали причину.

Вам необходимо установить libcrypto.so. Обычно это символическая ссылка на одну из реальных библиотек, чье имя (libcrypto.so.??) будет встроено в двоичный файл. Во время выполнения требуется только эта библиотека, но символическая ссылка необходима для компиляции.

Для получения более подробной информации см. Diego E. Pettenò: Linkers and names.