I assume you included your Debug folder as an additional library folder and 
added all the libs as dependencies in your Linker options.

Am Dienstag, 26. November 2019 00:38:27 UTC+1 schrieb Stéphane Charette:
>
> (Windows10, Visual Studio Community 2019, protobufs v3.10.1, gRPC v1.20.0.)
>
> I need to use protocol buffers and gRPC to get some data, and then combine 
> that with other things to write a plugin for an existing Windows 
> application.  So my plugin will be a .dll that is dynamically loaded by the 
> application which I didn't write and cannot control.
>
> For that reason, I wanted gRPC and protocol buffers to be statically 
> linked into my .dll.  This way users will only have a single .dll file they 
> need to manage.  But I'm having a very difficult time figuring out how to 
> properly build protobufs and grpc for Windows so I can link a .lib file 
> into the rest of my code.
>
> I first tried to use vcpkg, like this:
>
> vcpkg.exe install zlib:x64-windows-static
> vcpkg.exe install c-ares:x64-windows-static
> vcpkg.exe install openssl:x64-windows-static
> vcpkg.exe install protobuf[zlib]:x64-windows-static
> vcpkg.exe install grpc:x64-windows-static
>
> If I remember correctly, this led to some link-time problems because the 
> libs use /MT, while the application uses/expects /MD.  So then I switched 
> to this:
>
> vcpkg.exe install zlib:x64-windows
> vcpkg.exe install c-ares:x64-windows
> vcpkg.exe install openssl:x64-windows
> vcpkg.exe install protobuf[zlib]:x64-windows
> vcpkg.exe install grpc:x64-windows
>
> But I believe this gave me .dll files instead of .lib files.  I even tried 
> this from a post I saw somewhere:
>
> SET ( VCPKG_CRT_LINKAGE dynamic )
> SET ( VCPKG_LIBRARY_LINKAGE static )
>
> So now I'm trying to build protobufs and grpc from scratch.  E.g.,
>
> git clone -b v3.10.1 https://github.com/protocolbuffers/protobuf.git
> cd protobuf
> git submodule update --init --recursive
> cd cmake
> mkdir build64
> cd build64
> cmake -DCMAKE_BUILD_TYPE=Debug -Dprotobuf_BUILD_TESTS=OFF 
> -Dprotobuf_WITH_ZLIB=OFF ..
>
> I then copied the resulting .lib files into my plugin project, but I'm 
> still seeing several unresolved external symbols, such as this:
>
> 1>app.pb.obj : error LNK2019: unresolved external symbol 
> "__declspec(dllimport) public: void __cdecl 
> google::protobuf::internal::ArenaStringPtr::ClearToEmpty(class 
> std::basic_string<char,struct std::char_traits<char>,class 
> std::allocator<char> > const *,class google::protobuf::Arena *)" 
> (__imp_?ClearToEmpty@ArenaStringPtr@internal@protobuf@google@@QEAAXPEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAVArena@34@@Z)
>  
> referenced in function "public: static void __cdecl 
> google::protobuf::internal::MapTypeHandler<9,class 
> std::basic_string<char,struct std::char_traits<char>,class 
> std::allocator<char> > >::Clear(struct 
> google::protobuf::internal::ArenaStringPtr *,class google::protobuf::Arena 
> *)" 
> (?Clear@?$MapTypeHandler@$08V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@internal@protobuf@google@@SAXPEAUArenaStringPtr@234@PEAVArena@34@@Z)
>
> So I'm still barking up the wrong tree.
>
> The files I'm attempting to linking against are:
>
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/gpr.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/grpc.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/grpc_cronet.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/grpc_unsecure.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/grpc++_cronet.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/grpc++_unsecure.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/grpc++.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/address_sorting.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/cares.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/zlibd.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/libprotobuf-lited.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/libprotobufd.lib
> ${CMAKE_HOME_DIRECTORY}/3rd-party/Debug/libprotocd.lib
>
> This was my attempt to manually fixing up the .lib against which to link.  
> Originally, I had tried it like this:
>
> FIND_PACKAGE ( Threads REQUIRED)
> FIND_PACKAGE ( ZLIB REQUIRED)
> FIND_PACKAGE ( c-ares CONFIG REQUIRED)
> FIND_PACKAGE ( OpenSSL REQUIRED)
> FIND_PACKAGE ( protobuf CONFIG REQUIRED)
> FIND_PACKAGE ( gRPC CONFIG REQUIRED)
>
> SET ( SPLICE_EXTERNAL_DEPS
> Threads::Threads
> protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite
> gRPC::gpr gRPC::grpc gRPC::grpc++ gRPC::grpc_cronet
> # c-ares::cares_static
> c-ares::cares # c-ares::cares_static ? should I be using static?
> OpenSSL::SSL OpenSSL::Crypto
> ZLIB::ZLIB
> )
>
> Another possibly-related question:  gRPC seems to include protocol 
> buffers.  Am I reading that correct?  By building gRPC, am I already 
> building protobufs, and thus shouldn't bother with protobufs directly?
>
> Thanks for any pointers,
>
> Stéphane
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/protobuf/36b2f016-a31c-4f05-8e77-60337b7ff7b6%40googlegroups.com.

Reply via email to