Код: Выделить всё
zoo_existsи значения:
Код: Выделить всё
ZOO_EXPIRED_SESSION_STATEКогда я создаю свой проект, я получаю:
Код: Выделить всё
[build] DSE.lib(ZkManager.obj) : error LNK2019: unresolved external symbol __imp_zoo_create referenced in function "private: void __cdecl ZkManager::createNode(class std::basic_string const &,bool)" (?createNode@ZkManager@@AEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkManager.obj) : error LNK2019: unresolved external symbol __imp_zoo_exists referenced in function "private: void __cdecl ZkManager::createNode(class std::basic_string const &,bool)" (?createNode@ZkManager@@AEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkManager.obj) : error LNK2019: unresolved external symbol __imp_zoo_get referenced in function "private: class std::basic_string __cdecl ZkManager::getData(class std::basic_string const &)" (?getData@ZkManager@@AEAA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV23@@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkManager.obj) : error LNK2019: unresolved external symbol __imp_zoo_get_children referenced in function "private: class std::vector __cdecl ZkManager::getChildren(class std::basic_string const &)" (?getChildren@ZkManager@@AEAA?AV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkManager.obj) : error LNK2019: unresolved external symbol __imp_ZOO_OPEN_ACL_UNSAFE referenced in function "private: void __cdecl ZkManager::createNode(class std::basic_string const &,bool)" (?createNode@ZkManager@@AEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkManager.obj) : error LNK2019: unresolved external symbol __imp_ZOO_EPHEMERAL referenced in function "private: void __cdecl ZkManager::createNode(class std::basic_string const &,bool)" (?createNode@ZkManager@@AEAAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_zookeeper_init referenced in function "public: __cdecl ZkSync::ZkSync(class std::basic_string const &)" (??0ZkSync@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_zookeeper_close referenced in function "public: virtual __cdecl ZkSync::~ZkSync(void)" (??1ZkSync@@UEAA@XZ) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_EXPIRED_SESSION_STATE referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_CONNECTED_STATE referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_CREATED_EVENT referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_DELETED_EVENT referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_CHANGED_EVENT referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_CHILD_EVENT referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] DSE.lib(ZkSync.obj) : error LNK2019: unresolved external symbol __imp_ZOO_SESSION_EVENT referenced in function "public: static void __cdecl ZkSync::watcher(struct _zhandle *,int,int,char const *,void *)" (?watcher@ZkSync@@SAXPEAU_zhandle@@HHPEBDPEAX@Z) [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[build] C:\Users\YOSSI\CLionProjects\DSE\build\Release\DSEApp.exe : fatal error LNK1120: 15 unresolved externals [C:\Users\YOSSI\CLionProjects\DSE\build\DSEApp.vcxproj]
[proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/YOSSI/CLionProjects/DSE/build --config Release --target ALL_BUILD -j 6 -- exited with code: 1
[driver] Build completed: 00:01:02.133
[build] Build finished with exit code 1
- скачал Zookeeper 3.9.2 tar.
- выполняется: mvn clean install -DskipTests
- в папке Zookeeper-client-c создана папка сборки и запускается: cmake .. -DWANT_SYNCAPI=ON
- запустил cmake --build . --config Release
Код: Выделить всё
cli.exe
hashtable.lib
zookeeper.lib
Код: Выделить всё
cmake_minimum_required(VERSION 3.12)
project(DSE)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(MSVC)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD")
endif()
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /VERBOSE:LIB")
endif()
# Set the path to ASIO
set(ASIO_INCLUDE_DIR "C:/asio-1.30.2/include")
# Include ASIO
include_directories(${ASIO_INCLUDE_DIR})
# Add definitions for standalone ASIO and Crow
add_definitions(-DASIO_STANDALONE)
add_definitions(-DCROW_DISABLE_STATIC_DIR)
add_definitions(-DCROW_DISABLE_COMPRESSION)
add_definitions(-DCROW_USE_ASIO)
add_definitions(-DTHREADED)
add_definitions(-DWIN32)
# If you're on Windows, you might need this
if(WIN32)
add_definitions(-D_WIN32_WINNT=0x0601)
endif()
# Set ASIO include directory for Crow
set(CROW_ASIO_INCLUDE_DIR ${ASIO_INCLUDE_DIR})
# Find Crow
find_package(Crow CONFIG REQUIRED)
# Set gRPC_DIR
set(gRPC_DIR "C:/grpc/lib/cmake/grpc")
set(Protobuf_DIR "C:/grpc/cmake")
set(absl_DIR "C:/grpc/lib/cmake/absl")
set(utf8_range_DIR "C:/grpc/lib/cmake/utf8_range")
set(jsoncpp_DIR "C:/jsoncpp/lib/cmake/jsoncpp")
find_package(absl CONFIG REQUIRED)
find_package(Protobuf CONFIG REQUIRED)
find_package(gRPC CONFIG REQUIRED)
# Find gRPC and Protocol Buffers
find_package(gRPC CONFIG REQUIRED)
find_package(Protobuf CONFIG REQUIRED)
# Find JsonCpp
find_package(jsoncpp CONFIG REQUIRED)
# Set the path to ZooKeeper
set(ZOOKEEPER_INCLUDE_DIR "C:/ZooKeeperC-Release/apache-zookeeper-3.9.2/zookeeper-client/zookeeper-client-c/include")
set(ZOOKEEPER_GENERATED_INCLUDE_DIR "C:/ZooKeeperC-Release/apache-zookeeper-3.9.2/zookeeper-client/zookeeper-client-c/generated")
set(ZOOKEEPER_LIB_DIR "C:/ZooKeeperC-Release/apache-zookeeper-3.9.2/zookeeper-client/zookeeper-client-c/Release")
# Include ZooKeeper
include_directories(${ZOOKEEPER_INCLUDE_DIR})
include_directories(${ZOOKEEPER_GENERATED_INCLUDE_DIR})
# Find the ZooKeeper library
find_library(ZOOKEEPER_LIB NAMES zookeeper PATHS ${ZOOKEEPER_LIB_DIR})
# Define the DSE library
add_library(DSE
app/Server.cpp
app/controllers/VoteController.cpp
app/controllers/VotesMap.cpp
app/models/CommandElections.cpp
app/models/ControllerMessage.cpp
app/models/Vote.cpp
app/models/VotesCount.cpp
app/models/VotesCountKey.cpp
app/paxos/AcceptAndAccepted.cpp
app/paxos/PrepareAndPromise.cpp
app/paxos/SessionsMap.cpp
app/utils/ReadStates.cpp
app/utils/ReadVoters.cpp
gRPCObjects/interceptors/ClientInterceptor.cpp
gRPCObjects/interceptors/ServerInterceptor.cpp
gRPCObjects/paxos/FuturePaxosGreetingClient.cpp
gRPCObjects/paxos/GreetingPaxosClient.cpp
gRPCObjects/paxos/GreetingPaxosServer.cpp
gRPCObjects/GreetingClient.cpp
gRPCObjects/GreetingServer.cpp
gRPCObjects/FutureRemoteGreetingClient.cpp
protos/Paxos.grpc.pb.cc
protos/Paxos.pb.cc
protos/Vote.grpc.pb.cc
protos/Vote.pb.cc
zk/ZkConnector.cpp
zk/ZkManager.cpp
zk/ZkSync.cpp
)
# Include directories
target_include_directories(DSE PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/app
${CMAKE_CURRENT_SOURCE_DIR}/gRPCObjects
${CMAKE_CURRENT_SOURCE_DIR}/protos
${CMAKE_CURRENT_SOURCE_DIR}/app/models
${CMAKE_CURRENT_SOURCE_DIR}/app/controllers
${CMAKE_CURRENT_SOURCE_DIR}/app/paxos
${CMAKE_CURRENT_SOURCE_DIR}/app/utils
${CMAKE_CURRENT_SOURCE_DIR}/zk
"C:/grpc/include"
"C:/jsoncpp/include"
${ASIO_INCLUDE_DIR}
${ZOOKEEPER_INCLUDE_DIR}
${ZOOKEEPER_GENERATED_INCLUDE_DIR}
)
# Option for threaded/non-threaded version
option(USE_THREADED "Use threaded version of ZooKeeper" ON)
# Set compile definitions based on USE_THREADED option
if(USE_THREADED)
target_compile_definitions(DSE PUBLIC THREADED)
endif()
# Link libraries
target_link_libraries(DSE PUBLIC
gRPC::grpc++
protobuf::libprotobuf
jsoncpp_lib
absl::base
absl::strings
Crow::Crow
${ZOOKEEPER_LIB}
)
target_compile_definitions(DSE PUBLIC
WIN32
THREADED
ASIO_STANDALONE
CROW_USE_ASIO
)
# Add executable
add_executable(DSEApp app/main.cpp)
target_link_libraries(DSEApp PRIVATE DSE)
# If on Windows, add these definitions
if(WIN32)
target_compile_definitions(DSE PUBLIC
_WIN32_WINNT=0x0601
WIN32_LEAN_AND_MEAN
NOMINMAX
)
endif()

но в моем случае я не вижу ни Zookeper_mt.lib, ни Zookeeper_st .lib, а просто Zookeeper.lib, может быть, это статическая версия без упомянутых мной функций и значений?
Эти функции в Zookeeper.h находятся под #ifdef THREADED< /code> который должен быть определен для опции сборки syncapi.
Написано, что:
В пакет входят две общие библиотеки: Zookeeper_st и Zookeeper_mt. Первый предоставляет только асинхронные API и обратные вызовы для интеграции в цикл событий приложения. Единственная причина существования этой библиотеки — поддержка платформ, на которых библиотека pthread недоступна или нестабильна (например, FreeBSD 4.x). Во всех остальных случаях разработчикам приложений следует использовать Zookeeper_mt, поскольку он включает поддержку как Sync, так и Async API.
Означает ли это, что если я в Windows и у вас нет библиотеки pthread, она всегда будет компилировать версию st, и ошибка, которую я вижу, связана с тем, что эти функции просто не компилируются из-за моей ОС?
Подробнее здесь: https://stackoverflow.com/questions/787 ... ed-symbols