CMake — невозможно правильно связать спуск на спуске на MacOSC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 CMake — невозможно правильно связать спуск на спуске на MacOS

Сообщение Anonymous »

Я собрал и установил abseil из исходного кода следующим образом:

Код: Выделить всё

cd ./abseil-cpp
git checkout 5dd240724366295970c613ed23d0092bcf392f18
mkdir build
cd ./build
cmake -DCMAKE_CXX_STANDARD=17 ..
make -j 4
sudo make install
Это мой CMakeLists.txt:

Код: Выделить всё

cmake_minimum_required(VERSION 3.22)
project(MyProject)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
set(OpenGL_GL_PREFERENCE LEGACY)
option(WITH_PROTOBUF PROTOBUF_DIR)

if(WITH_PROTOBUF)
set(PROTOBUF_INCLUDE_DIR ${WITH_PROTOBUF}/include)
set(PROTOBUF_LIB_DIR ${WITH_PROTOBUF}/lib)
endif()

find_package(OpenGL REQUIRED)
find_package(SDL2 REQUIRED)
find_package(Protobuf REQUIRED)
find_package(gRPC REQUIRED)
find_package(absl REQUIRED)

if(APPLE)
set(OPENSSL_ROOT_DIR "/opt/homebrew/opt/openssl@3.0")
set(OPENSSL_INCLUDE_DIR "/opt/homebrew/opt/openssl@3.0/include")
set(OPENSSL_LIBRARIES "/opt/homebrew/opt/openssl@3.0/lib")
endif ()

find_package (OpenSSL REQUIRED)
# set macro-directory
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/macros)

if(absl_FOUND)
message(STATUS "Abseil found:")
if(absl::base_FOUND)
message(STATUS "  - absl::base found")
endif()
if(absl::synchronization_FOUND)
message(STATUS "  - absl::synchronization found")
endif()
if(absl::strings_FOUND)
message(STATUS "  - absl::strings found")
endif()
if(absl::memory_FOUND)
message(STATUS "  - absl::memory found")
endif()
if(absl::time_FOUND)
message(STATUS "   - absl::time found")
endif()
else()
message(FATAL_ERROR "Abseil not found!")
endif()

file(GLOB_RECURSE Source_Files
${CMAKE_CURRENT_SOURCE_DIR}/Configuration/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Crypto/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Database/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/DataSchemas/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Dynamic/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Engine/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Engine/Component/*.h
${CMAKE_CURRENT_SOURCE_DIR}/Engine/Component/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Engine/Profiler/*.h
${CMAKE_CURRENT_SOURCE_DIR}/Engine/Profiler/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Engine/Signal/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Http/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Memory/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Logging/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Logging/*.cxx
${CMAKE_CURRENT_SOURCE_DIR}/Networking/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Server/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Threading/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Utils/*.cpp
)

add_library(Vibranium-Engine SHARED ${Source_Files})

target_include_directories(Vibranium-Engine PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_CURRENT_SOURCE_DIR}/dep/stb
${CMAKE_CURRENT_SOURCE_DIR}/dep/rapidjson/include
${PROTOBUF_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR}
${SDL2_INCLUDE_DIRS}
${MYSQL_INCLUDE_DIR}
${absl_INCLUDE_DIRS}
)

if(APPLE)
include_directories(/opt/homebrew/include)
include_directories(/usr/local/include)
target_link_options(Vibranium-Engine PRIVATE -Wl,-ld_classic)
endif()

target_link_libraries(Vibranium-Engine PUBLIC
boost
curl
fmt
ImGui
ImGuizmo
mysql
utf8cpp
tabulate::tabulate
gtest_main
sentry::sentry
b_stacktrace::b_stacktrace
xmem
${SDL2_LIBRARIES}
${OPENGL_LIBRARIES}
DebugUtils
Detour
DetourCrowd
DetourTileCache
Recast
OpenSSL::SSL
OpenSSL::Crypto
${Protobuf_LIBRARIES}
${MYSQL_LIBRARIES}
absl::base
absl::synchronization
absl::strings
absl::memory
absl::time
gRPC::grpc++
gRPC::grpc++_reflection
)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/dep)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/Tests)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/Vibranium)

if (NOT EXISTS ${CMAKE_BINARY_DIR}/bin/Engine/Resources)
message(STATUS "New ${AppName} Engine Resources folder will be created in: ${CMAKE_BINARY_DIR}/bin/Engine/Resources/")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/Engine/Resources DESTINATION ${CMAKE_BINARY_DIR}/bin/Engine)
else()
file(GLOB Resources ${CMAKE_CURRENT_SOURCE_DIR}/Engine/Resources/*)
file(COPY ${Resources} DESTINATION ${CMAKE_BINARY_DIR}/bin/Engine/Resources)
endif()

if(APPLE)
if (NOT EXISTS ${CMAKE_BINARY_DIR}/bin/lib/SDL2.framework)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/dep/SDL2/ DESTINATION ${CMAKE_BINARY_DIR}/bin/lib)
else()
file(GLOB SDL2_LIBRARY_FILES ${CMAKE_CURRENT_SOURCE_DIR}/dep/SDL2/*)
file(COPY ${SDL2_LIBRARY_FILES} DESTINATION ${CMAKE_BINARY_DIR}/bin/lib/)
endif()
endif()

set_target_properties(
Vibranium-Engine
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/lib
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/lib
)

install(TARGETS Vibranium-Engine LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
set_target_properties(RecastDemo PROPERTIES EXCLUDE_FROM_ALL TRUE)
При сборке 100 на этапе связывания я получаю следующую ошибку:

Код: Выделить всё

ld: warning: ignoring duplicate libraries: '/usr/local/lib/libprotobuf.a'
ld:  Undefined symbols:
absl::lts_20211102::CHexEscape(absl::lts_20211102::string_view), referenced from:
void absl::lts_20211102::functional_internal::InvokeObject(absl::lts_20211102::functional_internal::VoidPtr, absl::lts_20211102::functional_internal::ForwardT::type, absl::lts_20211102::functional_internal::ForwardT::type) in libgpr.a[42](status_helper.cc.o)
void absl::lts_20211102::functional_internal::InvokeObject(absl::lts_20211102::functional_internal::VoidPtr, absl::lts_20211102::functional_internal::ForwardT::type, absl::lts_20211102::functional_internal::ForwardT::type) in libgpr.a[42](status_helper.cc.o)
void absl::lts_20211102::functional_internal::InvokeObject(absl::lts_20211102::functional_internal::VoidPtr, absl::lts_20211102::functional_internal::ForwardT::type, absl::lts_20211102::functional_internal::ForwardT::type) in libgpr.a[42](status_helper.cc.o)
absl::lts_20211102::FormatTime(absl::lts_20211102::string_view, absl::lts_20211102::Time, absl::lts_20211102::TimeZone), referenced from:
grpc_core::AwsRequestSigner::AwsRequestSigner(std::__1::basic_string, std::__1::basic_string, std::__1::basic_string, std::__1::basic_string, std::__1::basic_string, std::__1::basic_string, std::__1::basic_string, std::__1::map, grpc_error**) in libgrpc.a[551](aws_request_signer.cc.o)
grpc_core::AwsRequestSigner::GetSignedRequestHeaders() in libgrpc.a[551](aws_request_signer.cc.o)
absl::lts_20211102::FormatTime(absl::lts_20211102::Time), referenced from:
grpc_service_account_jwt_access_credentials::debug_string() in libgrpc.a[561](jwt_credentials.cc.o)
void absl::lts_20211102::functional_internal::InvokeObject(absl::lts_20211102::functional_internal::VoidPtr, absl::lts_20211102::functional_internal::ForwardT::type, absl::lts_20211102::functional_internal::ForwardT::type) in libgpr.a[42](status_helper.cc.o)
absl::lts_20211102::ToTimespec(absl::lts_20211102::Time), referenced from:
grpc_core::ToGprTimeSpec(absl::lts_20211102::Time) in libgpr.a[45](time_util.cc.o)
absl::lts_20211102::Base64Escape(absl::lts_20211102::string_view), referenced from:
grpc_core::channelz::SocketNode::Security::Tls::RenderJson() in libgrpc.a[404](channelz.cc.o)
grpc_core::channelz::SocketNode::Security::Tls::RenderJson() in libgrpc.a[404](channelz.cc.o)
grpc_core::channelz::(anonymous namespace)::PopulateSocketAddressJson(std::__1::map*, char const*, char const*) in libgrpc.a[404](channelz.cc.o)
absl::lts_20211102::Notification::Notify(), referenced from:
grpc_core::Server::ShutdownUnrefOnRequest() in libgrpc.a[618](server.cc.o)
absl::lts_20211102::Notification::~Notification(), referenced from:
grpc_core::Server::~Server() in libgrpc.a[618](server.cc.o)
grpc_core::Server::ShutdownAndNotify(grpc_completion_queue*, void*) in libgrpc.a[618](server.cc.o)
absl::lts_20211102::RFC3339_full, referenced from:
grpc_core::ExternalAccountCredentials::OnImpersenateServiceAccountInternal(grpc_error*) in libgrpc.a[552](external_account_credentials.cc.o)
absl::lts_20211102::UnknownError(absl::lts_20211102::string_view), referenced from:
grpc_core::(anonymous namespace)::GoogleCloud2ProdResolver::ZoneQuery::OnDone(grpc_core::(anonymous namespace)::GoogleCloud2ProdResolver*, grpc_http_response const*, grpc_error*) in libgrpc.a[49](google_c2p_resolver.cc.o)
grpc_core::(anonymous namespace)::GoogleCloud2ProdResolver::ZoneQuery::OnDone(grpc_core::(anonymous namespace)::GoogleCloud2ProdResolver*, grpc_http_response const*, grpc_error*) in libgrpc.a[49](google_c2p_resolver.cc.o)
grpc_core::(anonymous namespace)::GoogleCloud2ProdResolver::ZoneQuery::OnDone(grpc_core::(anonymous namespace)::GoogleCloud2ProdResolver*, grpc_http_response const*, grpc_error*) in libgrpc.a[49](google_c2p_resolver.cc.o)
Есть идеи, почему и как я могу это исправить, чтобы снова правильно ссылаться на спуске?

Подробнее здесь: https://stackoverflow.com/questions/785 ... l-on-macos
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • У меня проблемы со сборкой спуска на спуске с помощью vcpkg
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • У меня проблемы со сборкой спуска на спуске с помощью vcpkg
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Невозможно воспроизвести мини-пакетный градиентный спуск Tensorflow.
    Anonymous » » в форуме C++
    0 Ответы
    53 Просмотры
    Последнее сообщение Anonymous
  • Невозможно воспроизвести мини-пакетный градиентный спуск Tensorflow [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Ошибка CMake в cmake/QtSeparateDebugInfo.cmake:65 (сообщение): Извлеченный двоичный путь для полосы не существует. Кросс
    Anonymous » » в форуме Linux
    0 Ответы
    93 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»