CMake возвращает несовпадающие включения и библиотеки для OpenSSL - PullRequest
0 голосов
/ 27 декабря 2018

Я установил последнюю версию OpenSSL (1.0.2q) через macports, и я пытаюсь создать проект на моем Mac, который зависит от OpenSSL, и обнаружил, что CMake, похоже, возвращает неправильный путь к библиотеке или неправильный путь включения:

message("@@@")
message(${OPENSSL_INCLUDE_DIR})
message(${OPENSSL_SSL_LIBRARY})
message("/@@@")

печатает:

@@@
/opt/local/include
/usr/lib/libssl.dylib
/@@@

Так что он дает мне заголовки для OpenSSL из macports и библиотеки из системы.

Я нашел это, потому что собирал внешнюю библиотекузавершается с ошибками компоновки:

Undefined symbols for architecture x86_64:
  "_X509_check_host", referenced from:
      _ma_tls_verify_server_cert in libmariadbclient.a(openssl.c.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Как я могу заставить CMake находить и использовать только библиотеки macports?

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете намекнуть CMake о местоположении OpenSSL с помощью переменной OPENSSL_ROOT_DIR environment (не CMake variable!), Установив для нее значение /opt/local.Другие способы подсказок, описанные в CMake не может найти библиотеку OpenSSL , также могут работать.


Обратите внимание, что может быть довольно сложно "спрятать" библиотеку в системном каталоге/usr/lib из компоновщика и из загрузчика среды выполнения.Это связано с тем, что другие библиотеки, используемые проектом, могут находиться в этом каталоге, что может помешать CMake создать правильный список каталогов для передачи компоновщику или для назначения RPATH.Обычно CMake предупреждает о таких ситуациях.

...