2010-01-08 1 views
0

Я пытаюсь статически ссылаться на libcrypto.a (из библиотеки openssl) после его создания из источника с помощью новой инструментальной цепочки. Однако всякий раз, когда я пытаюсь использовать любую из функций из этой библиотеки, я продолжаю получать ошибки «неопределенной ссылки». Я убедился, что правый заголовочный файл был включен. Я также дважды проверил таблицу символов libcrypto.a и убедился, что эти функции действительно определены.Устранение неполадок с ошибками времени компиляции

Есть ли что-нибудь еще, что я могу сделать, чтобы отладить эту ошибку, например, получить дополнительную информацию из компоновщика или изучить сам libcrypto.a, чтобы выяснить, почему компоновщик выплескивает ошибку «неопределенной ссылки», когда отображаются показанные символы в таблице символов?

+4

Опубликовать некоторые сообщения об ошибках. – 2010-01-08 17:57:59

+0

Nevermind, получил это, отредактировав, изменив порядок аргументов компоновщика. У меня была статическая библиотека до -o. Переключил их вокруг, и это сработало ... не понятно почему, но, видимо, порядок аргументов компоновщика имеет значение – theactiveactor

ответ

1

Неопределенная ссылка/символ - это ошибка компоновщика, указывающая, что компоновщик не может найти указанный символ в любом из связанных между собой объектных модулей. Это указывает на одно или несколько из следующих факторов:

  1. Указанный класс/метод/функция/переменная/независимо от того, что нигде не определено в проекте.
  2. Символ недоступен, вероятно, из-за спецификатора доступа (в C++, не применяется к ANSI C)
  3. Ссылка неверна. Это может быть связано с орфографической ошибкой или аналогичной проблемой. (маловероятно)
  4. При вызове компоновщика вы пренебрегли включением необходимой библиотеки в сценарий сборки.
1

Я вижу ваше сообщение помечено c++. OpenSSL написан на C.

ли вы помните, чтобы сделать

extern "C" { 
#include <various SSL files> 
} 

?

+0

Nope - у него уже есть те - например, md5.h имеет '#ifdef __cplusplus extern "C" {#endif' (более трех строк) вверху. –

1

Grep символ из libcrypto с помощью нм

, так что вы можете увидеть, если его там - вероятно, нет (Дух)

SSL имеет 2 LIBS, возможно, вы используете неправильный один

, что exectly - отсутствующий символ

+0

Фактически, вызов любой функции внутри libcrypto возвращает «неопределенная ссылка». Я был сосредоточен на случайном – theactiveactor