2013-04-27 12 views
41

Próbuję zainstalować oprogramowanie, które używa cmake do zainstalowania się, kiedy daję komendę cmake ..
daje mi następujący błąd w tym pliku, CMakeLists.txt --- ----- linia ---> find_package (OpenSSL wymagane): -CMake nie jest w stanie znaleźć biblioteki OpenSSL

cmake .. 
-- Could NOT find Git (missing: GIT_EXECUTABLE) 
ZLib include dirs: /usr/include 
ZLib libraries: /usr/lib/arm-linux-gnueabihf/libz.so 
Compiling with SSL support 
CMake Error at /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (message): 
    Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the 
    system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES 
    OPENSSL_INCLUDE_DIR) 
Call Stack (most recent call first): 
    /usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:291 (_FPHSA_FAILURE_MESSAGE) 
    /usr/local/share/cmake-2.8/Modules/FindOpenSSL.cmake:313 (find_package_handle_standard_args) 
    CMakeLists.txt:436 (find_package) 

Oto część plików CMakeLists.txt, gdzie błąd nadchodzi: ------

# 
# OpenSSL 
# 
if (WITH_SSL) 
    message("Compiling with SSL support") 

    if (USE_CYASSL) 
     # Use CyaSSL as OpenSSL replacement. 
     # TODO: Add a find_package command for this also. 
     message("CyaSSL include dir: ${CYASSL_INCLUDE_DIRS}") 
     message("CyaSSL libraries: ${CYASSL_LIB}") 

     # Additional to the root directory we need to include 
     # the cyassl/ subdirectory which contains the OpenSSL 
     # compatability layer headers. 
     foreach(inc ${CYASSL_INCLUDE_DIRS}) 
      include_directories(${inc} ${inc}/cyassl) 
     endforeach() 

     list(APPEND LIB_LIST ${CYASSL_LIB}) 
    else() 
     # TODO: Add support for STATIC also. 
     find_package(OpenSSL REQUIRED) 

     message("OpenSSL include dir: ${OPENSSL_INCLUDE_DIR}") 
     message("OpenSSL libraries: ${OPENSSL_LIBRARIES}") 

     include_directories(${OPENSSL_INCLUDE_DIR}) 
     list(APPEND LIB_LIST ${OPENSSL_LIBRARIES}) 
    endif() 
endif(WITH_SSL) 

http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/INSTALL?txt
Teraz mam zainstalowany OpenSSL, tutaj: ----

ssl header is here -- > /usr/local/ssl/include/openssl/ 
ssl library is here -- > /usr/local/ssl/lib/libssl.a 
          /usr/local/ssl/lib/libcrypto.a 
openssl is here  -- > /usr/local/ssl/bin 

Kładę moje .profile jako: ----

export LD_LIBRARY_PATH=/usr/local/ssl/include/openssl:/usr/lib:/usr/local/lib:/usr/lib/pkgconfig:/usr/local/include/wx-2.8/wx:$LD_LIBRARY_PATH 
export PKG_CONFIG_PATH=/usr/lib/pkgconfig 
export OPENSSL_ROOT_DIR=/usr/local/ssl 
export OPENSSL_LIBRARIES=/usr/local/ssl/lib/ 

PATH = /usr/local/ssl/bin:$PATH 

Jak rozwiązać ten problem?

edit: -
otrzymuję ten błąd

/usr/local/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': 
dso_dlfcn.c:(.text+0x10): undefined reference to `dlopen' 
dso_dlfcn.c:(.text+0x24): undefined reference to `dlsym' 
dso_dlfcn.c:(.text+0x30): undefined reference to `dlclose' 

Odpowiedz

41

Jest to wspólne nieporozumienie: CUpewnij nie potrzebuje zmiennych środowiskowych wiedzieć, gdzie jest biblioteka i obejmują dir są jednak zmienne CWprowadä.

Ponieważ program CMake nie może znaleźć biblioteki biblioteki OpenSSL i dołączać do niej katalogu, będziesz musiał ręcznie powiedzieć mu, gdzie się znajduje, korzystając z wiersza poleceń, gdy go wywołasz. Użyj opcji -D, aby ustawić stałe w CMake z wiersza poleceń. Będziesz musiał ustawić stałe OPENSSL_ROOT_DIR i OPENSSL_LIBRARIES, ponieważ to one powodują błąd.

cmake -DOPENSSL_ROOT_DIR=/usr/local/ssl -DOPENSSL_LIBRARIES=/usr/local/ssl/lib 
+1

jeden problem .. jak ustawić -ldl przed linkami - biblioteki OpenSSL ----- zredagowałem błąd, który dostaję? - libcrypto need ldl – Allan

+0

Nie wiem, może OPENSSL_LIBRARIES potrzebował samej ścieżki biblioteki, a nie tylko biblioteki reż. W wielu bibliotekach musisz podać ścieżkę do samej biblioteki. Myślę jednak, że wcześniej powinien był ulec awarii, gdyby tak było. Nie sądzę, że będę w stanie Ci pomóc więcej, przepraszam:/ – Morwenn

8

Jeśli można użyć pkg-config: pkg_search_module() można znaleźć OpenSSL dla Ciebie.

# Search OpenSSL 
find_package(PkgConfig REQUIRED) 
pkg_search_module(OPENSSL REQUIRED openssl) 

if(OPENSSL_FOUND) 
    include_directories(${OPENSSL_INCLUDE_DIRS}) 
    message(STATUS "Using OpenSSL ${OPENSSL_VERSION}") 
else() 
    # Error; with REQUIRED, pkg_search_module() will throw an error by it's own 
endif() 

target_link_libraries(${YOUR_TARGET_HERE} ${OPENSSL_LIBRARIES}) 
7

Ten sam problem i naprawiono go w moim centos 6.5 za pomocą następującego polecenia.

yum install openssl-devel 
9

Proszę zainstalować OpenSSL z poniższego linku:
https://code.google.com/p/openssl-for-windows/downloads/list
następnie ustawić zmienne poniżej:

OPENSSL_ROOT_DIR=D:/softwares/visualStudio/openssl-0.9.8k_WIN32 
OPENSSL_INCLUDE_DIR=D:/softwares/visualStudio/openssl-0.9.8k_WIN32/include 
OPENSSL_LIBRARIES=D:/softwares/visualStudio/openssl-0.9.8k_WIN32/lib 
+0

Działa jak czar, dzięki! Udało mi się wyodrębnić plik zip pobrany z linku, o którym wspomniałeś. Następnie dodałem po prostu -DOPENSSL_ROOT-DIR = "C:/Path/To/Extracted/Files". –

+2

Jest to obecnie bardzo nieaktualne i prawdopodobnie niebezpieczne w użyciu. Strona internetowa openssl zawiera linki do 2 stron zawierających pliki binarne. Wygląda na to, że problem dotyczy takich bibliotek związanych z bezpieczeństwem. Jednak ustawienie takich wartości powinno również działać z innymi plikami binarnymi. – Beached

+0

Jesteś człowiekiem z odpowiedzią, dzięki! –

94

miałem ten sam problem (openssl) i ten pracował dla mnie na Ubuntu 14.04.1 LTS

sudo apt-get install libssl-dev 
+0

Świetnie! Dzięki . – GutiMac

+2

To powinna być zaakceptowana odpowiedź! Dzięki za rozwiązanie! – Mirakurun

+0

Działa również na Ubuntu 16.04 LTS. – Falko

13

naprawiono na macOS przy użyciu

brew install openssl 
cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib 
+0

'OPENSSL_LIBRARIES' jest zmienną wyjściową, a nie wejściową. Zobacz https://github.com/Kitware/CMake/blob/300979e7889b34d61803675c560fe450c7404447/Modules/FindOpenSSL.cmake –

0

@Morwenn ma rację. Musisz skonfigurować openssl DIR. Wcześniej możesz potrzebować upewnić się, że je masz. powinieneś sprawdzić, czy go masz. Najpierw uruchom openssl version, jeśli masz go, możesz win + r uruchomić openssl i wygrasz znaleźć rdzeń, ponieważ może nie nazwać jako openssl w twoim systemie.

enter image description here

enter image description here

2

masz plik FindOpenSSL.cmake w module cmake (ścieżka usr/shared.cmake-3,5/moduły) # Szukaj OpenSSL

find_package(OpenSSL REQUIRED) 
if(OpenSSL_FOUND) 
    include_directories(${OPENSSL_INCLUDE_DIRS}) 
    link_directories(${OPENSSL_LIBRARIES}) 
    message(STATUS "Using OpenSSL ${OPENSSL_VERSION}") 

target_link_libraries(project_name /path/of/libssl.so /path/of/libcrypto.so) 
0

Note dla użytkowników Fedory 27: Musiałem zainstalować pakiet openssl-devel, aby pomyślnie uruchomić cmake.

sudo dnf install openssl-devel

0

tylko dla zabawy złego postu alternatywną odpowiedź na pytanie pracuje w PO:

cmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl/ -DOPENSSL_CRYPTO_LIBRARY=/usr/local/opt/openssl/lib/ 
Powiązane problemy