Связывание библиотек OpenSSL с программой - PullRequest
16 голосов
/ 04 декабря 2010

Я собрал OpenSSL из исходного кода (преднамеренно старая версия; построена с ./config && make && make test) и предпочел бы использовать то, что я построил, не делая make install, чтобы ссылаться на мою программу.ошибка:

gcc -Wall -Wextra -Werror -static -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto 
-Iopenssl/openssl-0.9.8k/include -o myApp source1.o source2.o common.o`

И я получаю серию ошибок, подобных:

common.c:(.text+0x1ea): undefined reference to `SSL_write'

Это заставляет меня думать, что с моим OpenSSL есть что-то странное.Если я опущу -Lopenssl/openssl-0.9.8k/ в моей команде, ошибка изменится на невозможность:

/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto

Я неправильно компилирую OpenSSL?Или как мне лучше решить эту проблему?

Ответы [ 3 ]

26 голосов
/ 04 декабря 2010

Глупые "Linux-измы" снова бьют! Очевидно, мне нужно изменить мою команду так, чтобы -L и -l были равны в конце (несмотря на то, что man gcc, похоже, указывает):

gcc -Wall -Wextra -Werror -static -o myApp source1.o source2.o common.o -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto -Iopenssl/openssl-0.9.8k/include

5 голосов
/ 04 декабря 2010

Почему вы не хотите использовать make install? Он может копировать сгенерированные двоичные файлы в каталог, который вы хотите, если вы ранее передали его в ./configure --prefix $HOME/target_library_install_directory

Если вы использовали этот трюк с каждой библиотекой, которую вы собираете и устанавливаете, вы можете добавить целевой каталог в переменную среды LIBRARY_PATH и избегать использования опции -L.

3 голосов
/ 30 мая 2017

Если вы используете Autotools или создаете проект Autools, например cURL, тогда вы сможете использовать pkg-config. Идея состоит в том, что пакет Autotools будет читать конфигурацию пакета OpenSSL, и все будет «просто работать» для вас.

Имя библиотеки конфигурации пакета OpenSSL openssl.

Вы бы использовали это так в проекте, основанном на make-файле.

%.o: %.c
        $(CC) -o $@ -c `pkg-config --cflags openssl` $^

target: foo.o bar.o baz.o
        $(CC) -o $@ `pkg-config --libs openssl` $^

Также см. Как использовать pkg-config в Make и Как использовать pkg-config для статической ссылки на библиотеку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...