Portál AbcLinuxu, 6. května 2025 14:27

Dotaz: cmake a linkování OpenSSL

Saljack avatar 3.5.2012 19:02 Saljack | skóre: 28 | blog: Saljack | Praha
cmake a linkování OpenSSL
Přečteno: 328×
Odpovědět | Admin
Dobrý večer, mám program, který sestavuji pomocí cmake a potřebuji použít OpenSSL knihovnu. Vše se mi sestaví dobře ale při linkování dostávám error na všechno co je v OpenSSL undefined reference to 'X509V3_set_ctx' atp. Projekt je rozdělen do různých částí jako je server core view atp. OpenSSL je použito pouze v serveru pokud ve složce se serverem použiji cmake a pak make vše proběhne v pořádku, ale pokud se snažím vše sestavit dohromady už to nejde. Už jsem zkoušel různě přehazovat v target_link_libraries proměnou ${OPENSSL_LIBRARIES}, ale bez úspěchu. Přikládám CMakeLists.txt: V kořenu mám:
project(kminidlna)
cmake_minimum_required(VERSION 2.6)
find_package(KDE4 REQUIRED)
find_package(Qt4 REQUIRED)
find_package(OpenSSL REQUIRED)

add_subdirectory(po)
add_subdirectory(src)

# set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)

add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS} )

set(VERSION "0.19")
poté ve složce src, v které je main:
include_directories(${KDE4_INCLUDES} ${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR} ${OPENSSL_INCLUDE_DIR}) 
set(VERSION "0.2 beta")

configure_file(kminidlna_version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kminidlna_version.h )

# enable_testing() #enable testing

# add_subdirectory(../po)
add_subdirectory(server)
add_subdirectory(view)

add_subdirectory(core)
add_subdirectory(tests)

set(kminidlna_SRCS main.cpp)
set(kminidlna_RCCS resource.qrc)

kde4_add_app_icon(kminidlna_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/resource/kminidlna.png")
qt4_add_resources(kminidlna_RCCS_SRCS ${kminidlna_RCCS})
kde4_add_executable(kminidlna ${kminidlna_SRCS} ${kminidlna_RCCS_SRCS})
target_link_libraries(kminidlna ${OPENSSL_LIBRARIES} server  core view  ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${QT_QTCORE_LIBRARY} ${QT_QTNETWORK_LIBRARY} )

install(TARGETS kminidlna DESTINATION  ${BIN_INSTALL_DIR})
install(PROGRAMS kminidlna.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resource/kminidlna.png DESTINATION ${ICON_INSTALL_DIR})
a konečně v server mám:
include_directories(${KDE4_INCLUDES} ${QT_INCLUDES} ${OPENSSL_INCLUDE_DIR})

set( SERVER_SRCS certificategenerator.cpp interface/restminidlnaput.cpp restconnection.cpp interface/restmediafolder.cpp interface/basicrestresource.cpp interface/restminidlna.cpp interface/restinterfaces.cpp interface/restresource.cpp
      restserver.cpp
      serverrequest.cpp
	)



kde4_add_library(server STATIC ${SERVER_SRCS} )

target_link_libraries( server ${OPENSSL_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTXMLPATTERNS_LIBRARY})
add_subdirectory(interface)
Už jsem z toho fakt nešťastný a nevím co s tím. V mém zkušebním projektu vše funguje.
Sex, Drugs & Rock´n Roll.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Saljack avatar 3.5.2012 19:03 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: cmake a linkování OpenSSL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ještě jsem zapomenul dodat, že předem všem moc děkuji za jakoukoliv pomoc.
Sex, Drugs & Rock´n Roll.
Saljack avatar 4.5.2012 01:15 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: cmake a linkování OpenSSL
Tak už jsem to vyřešil. Stačilo do target_link_library přidat -lcrypto a vše již funguje. Zajímavé je, že v jiném projektu to fungovalo bez toho.
Sex, Drugs & Rock´n Roll.
4.5.2012 10:05 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: cmake a linkování OpenSSL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebude problem s verzi cmake? Podle vseho FindOpenSSL.cmake obsahuje (v me verzi):
  FIND_LIBRARY(OPENSSL_SSL_LIBRARIES NAMES ssl ssleay32 ssleay32MD)
  FIND_LIBRARY(OPENSSL_CRYPTO_LIBRARIES NAMES crypto)
...
  SET(OPENSSL_LIBRARIES ${OPENSSL_SSL_LIBRARIES} ${OPENSSL_CRYPTO_LIBRARIES})
Tudiz bych cekal, ze v OPENSSL_LIBRARIES bude i "-lcrypto". Nejde cmake spustit v debug rezimu a zjistit kde je problem (napr pomoci --debug-output, nebo --trace)?
4.5.2012 10:24 chochi | skóre: 29 | Praha
Rozbalit Rozbalit vše Re: cmake a linkování OpenSSL
Zkus pred target_link_libraries( server ${OPENSSL_LIBRARIES} ${QT_QTXML_LIBRARY} ${QT_QTXMLPATTERNS_LIBRARY}) pridat:
MESSAGE(STATUS "OPENSSL_SSL_LIBRARIES    :" "${OPENSSL_SSL_LIBRARIES}")
MESSAGE(STATUS "OPENSSL_CRYPTO_LIBRARIES :" "${OPENSSL_CRYPTO_LIBRARIES}")
MESSAGE(STATUS "OPENSSL_LIBRARIES        :" "${OPENSSL_LIBRARIES}")
Me to vypise:
-- OPENSSL_SSL_LIBRARIES    :/usr/lib64/libssl.so
-- OPENSSL_CRYPTO_LIBRARIES :/usr/lib64/libcrypto.so
-- OPENSSL_LIBRARIES        :/usr/lib64/libssl.so;/usr/lib64/libcrypto.so
Saljack avatar 4.5.2012 14:29 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: cmake a linkování OpenSSL
V projektu, který jde v pohodě nalinkovat to vypíše podobně jako tobě. V tom problémovém je OPENSSL_SSL_LIBRARIES a OPENSSL_CRYPTO_LIBRARIES bez cesty. OPENSSL_LIBRARIES :/usr/lib/i386-linux-gnu/libssl.so je ok to je trochu divný ne?
Sex, Drugs & Rock´n Roll.
Řešení 1× (Saljack (tazatel))
Saljack avatar 4.5.2012 14:34 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: cmake a linkování OpenSSL
Ha tak jsem to vyřešil problém je v pořadí
find_package(OpenSSL REQUIRED)
find_package(KDE4 REQUIRED)
find_package(Qt4 REQUIRED)
kde musí být OpenSSL před Qt4. Qt si asi ty proměnné nějak přepíše. Moc díky za pomoc.
Sex, Drugs & Rock´n Roll.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.