I have c++ lib made by my colleagues which is compiled perfectly on Linux. I need make it on Mac. Plain cmake && make works fine on Mac, but I need to make it with shared libs
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON ..
cmake --build .
And during build I get errors:
[ 83%] Linking CXX shared library libacvp-core.dylib
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
…
"log4cplus::Logger::~Logger()", referenced from: …
"_nghttp2_select_next_protocol", referenced from: …
I've installed openssl (by brew) and some required libs (log4cplus, nghttp2) from sources. I see them in /usr/local/lib. Also I've set some env variables.
% echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/local/include
% echo $LIBRARY_PATH
/usr/local/lib
% echo $LDFLAGS
-L/usr/local/opt/openssl@3/lib -L/usr/local/opt/util-linux/lib -L/usr/local/lib
But it doesn't help. Maybe I need modify CMakeLists somehow additionally for Mac?
UPD: CMakeLists.txt
SET(TARGET myproject-cpp)
PROJECT(${TARGET})
option(MYPROJECT_CPP_BUILD_TESTS "Build MYPROJECT-CPP tests" OFF)
EXECUTE_PROCESS(COMMAND
bash "-c" "git tag -l --contains HEAD | tail -1"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_TAG
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
IF (DEFINED $ENV{CI_GIT_COMMIT_TAG})
SET(GIT_COMMIT_TAG $ENV{CI_GIT_COMMIT_TAG})
ENDIF (DEFINED $ENV{CI_GIT_COMMIT_TAG})
message("GIT_COMMIT_TAG=${GIT_COMMIT_TAG}")
message("CI_GIT_COMMIT_TAG=$ENV{CI_GIT_COMMIT_TAG}")
EXECUTE_PROCESS(COMMAND
git rev-parse --short HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_COMMIT_SHA
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
IF (DEFINED $ENV{CI_GIT_COMMIT_SHA})
SET(GIT_COMMIT_SHA $ENV{CI_GIT_COMMIT_SHA})
ENDIF (DEFINED $ENV{CI_GIT_COMMIT_SHA})
message("GIT_COMMIT_SHA=${GIT_COMMIT_SHA}")
message("CI_GIT_COMMIT_SHA=$ENV{CI_GIT_COMMIT_SHA}")
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/src/build_info.cpp.in
${CMAKE_CURRENT_SOURCE_DIR}/src/build_info.cpp)
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Wextra -DGIT_COMMIT_TAG")
IF (CLANG_TIDY_ENABLE)
IF (NOT CMAKE_CXX_CLANG_TIDY)
SET(CLANG_TIDY_EXECUTABLE "clang-tidy")
SET(CLANG_TIDY_CHECKS "-checks=*")
SET(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXECUTABLE} ${CLANG_TIDY_CHECKS})
ENDIF()
ELSE()
UNSET(CMAKE_CXX_CLANG_TIDY)
ENDIF()
FIND_PACKAGE(OpenSSL 1.0.2 REQUIRED)
FIND_PACKAGE(Libevent REQUIRED)
ADD_SUBDIRECTORY(module/myproject-core)
if(MYPROJECT_CPP_BUILD_TESTS)
ADD_SUBDIRECTORY(tests)
endif()
file(GLOB SOURCES
src/*.*
src/http-parser/*.*
)
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib")
add_library(${TARGET} ${SOURCES})
target_include_directories(${TARGET} PUBLIC include)
target_link_libraries(${TARGET}
acvp-core
${OPENSSL_LIBRARIES}
${LIBEVENT_LIBRARIES}
nghttp2
)
module/myproject-core/CMakeLists.txt
cmake_minimum_required(VERSION 3.1)
set(TARGET myproject-core)
project(${TARGET})
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
option(MYPROJECT_CORE_BUILD_TESTS "Build MYPROJECT-CORE tests" OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Wextra")
IF (CLANG_TIDY_ENABLE)
IF (NOT CMAKE_CXX_CLANG_TIDY)
SET(CLANG_TIDY_EXECUTABLE "clang-tidy")
SET(CLANG_TIDY_CHECKS "-checks=*")
SET(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXECUTABLE} ${CLANG_TIDY_CHECKS})
ENDIF()
ELSE()
UNSET(CMAKE_CXX_CLANG_TIDY)
ENDIF()
find_package(CURL REQUIRED)
find_package(Libevent REQUIRED)
add_subdirectory(protocol)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/common
)
file(GLOB SOURCES
./payload/*.*
./http-header-utils/*.*
./libevent/*.*
./libevent/async-http-client/*.*
./http-packets/*.*
./http-packets/responses/*.*
./http-packets/requests/*.*
./http2-session/*.*
./streams/*.*
./streams/telemetry-processing-strategy/*.*
./streams/specification-registry/*.*
./ssl-utils/*.*
./http-request-utils/*.*
./signals/*.*
./common/*.*
./logger/*.*
./messages/*.*
./rmq/*.*
./compression/*.*
./message-brokers/*.*
./exception/*.*
./monitoring/*.*
./rate-limit/*.*
./sequence/*.*
./curl/*.*
./kafka/*.*
)
if(MYPROJECT_CORE_BUILD_TESTS)
add_subdirectory(tests)
endif()
add_library(${TARGET} ${SOURCES})
set(TARGET_INCLUDE_DIRECTORIES
${CMAKE_CURRENT_SOURCE_DIR}
${CURL_INCLUDE_DIRS}
)
target_include_directories(${TARGET} PUBLIC ${TARGET_INCLUDE_DIRECTORIES})
set(TARGET_LINK_LIBRARIES
protocol
${CURL_LIBRARIES}
${LIBEVENT_LIBRARIES}
uuid
z
)
target_link_libraries(${TARGET} ${TARGET_LINK_LIBRARIES})
add_definitions(-DZLIB_CONST)