Hi Brent, In order to use RPC, you'll need to link against libcapnp-rpc and libkj-async, in addition to libcapnp and libkj.
Let me know if that helps. -Kenton On Tue, Aug 15, 2017 at 12:25 PM, Brent Murphy <[email protected]> wrote: > Hi there, > > I'm trying to incorporate cap'n proto into a C++ server project. It's my > first dabble with C++ so I'm struggling a bit and wondered if anyone could > offer some advice on the error below? > > Many thanks, > Brent > > Cmake error: > > cmake -H. -Bbuild ; cmake --build build -- -j3 > > ✗ ✭ ✱ > -- Configuring done > -- Generating done > -- Build files have been written to: /Users/burt/Development/go/src/ > github.com/brentmurphy/piper_server/build > Scanning dependencies of target piper_server > [ 25%] Building CXX object CMakeFiles/piper_server.dir/src/main.cpp.o > Apple LLVM version 8.1.0 (clang-802.0.42) > Target: x86_64-apple-darwin16.7.0 > Thread model: posix > InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin > "/Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple > x86_64-apple-macosx10.12.0 -Wdeprecated-objc-isa-usage > -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free > -disable-llvm-verifier -discard-value-names -main-file-name main.cpp > -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim > -masm-verbose -munwind-tables -target-cpu penryn -target-linker-version > 278.4 -v -dwarf-column-info -debugger-tuning=lldb -coverage-file > /Users/burt/Development/go/src/github.com/brentmurphy/ > piper_server/build/CMakeFiles/piper_server.dir/src/main.cpp.o > -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0 -I /usr/local/include > -I /Users/burt/Development/go/src/github.com/brentmurphy/piper > -stdlib=libc++ -std=c++11 -fdeprecated-macro -fdebug-compilation-dir > /Users/burt/Development/go/src/github.com/brentmurphy/piper_server/build > -ferror-limit 19 -fmessage-length 181 -stack-protector 1 -fblocks > -fobjc-runtime=macosx-10.12.0 -fencode-extended-block-signature > -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option > -fcolor-diagnostics -o CMakeFiles/piper_server.dir/src/main.cpp.o -x c++ > /Users/burt/Development/go/src/github.com/brentmurphy/ > piper_server/src/main.cpp > clang -cc1 version 8.1.0 (clang-802.0.42) default target > x86_64-apple-darwin16.7.0 > ignoring nonexistent directory "/usr/include/c++/v1" > ignoring duplicate directory "/usr/local/include" > as it is a non-system directory that duplicates a system directory > #include "..." search starts here: > #include <...> search starts here: > /Users/burt/Development/go/src/github.com/brentmurphy/piper > /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 > /usr/local/include > /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/include > /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/include > /usr/include > /System/Library/Frameworks (framework directory) > /Library/Frameworks (framework directory) > End of search list. > [ 50%] Linking CXX executable ../bin/piper_server > Apple LLVM version 8.1.0 (clang-802.0.42) > Target: x86_64-apple-darwin16.7.0 > Thread model: posix > InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin > "/Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library > /Applications/Xcode.app/Contents/Developer/Toolchains/ > XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 > -macosx_version_min 10.12.0 -o ../bin/piper_server -search_paths_first > -headerpad_max_install_names CMakeFiles/piper_server.dir/src/main.cpp.o > CMakeFiles/piper_server.dir/Users/burt/Development/go/src/ > github.com/brentmurphy/piper/piper.capnp.c++.o > CMakeFiles/piper_server.dir/Users/burt/Development/go/src/ > github.com/brentmurphy/piper/piper.rpc.capnp.c++.o /usr/local/lib/libkj.a > /usr/local/lib/libcapnp.a -lc++ -lSystem /Applications/Xcode.app/ > Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/ > bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a > Undefined symbols for architecture x86_64: > > "capnp::Capability::Client::makeLocalClient(kj::Own<capnp::Capability::Server>&&)", > referenced from: > capnp::Capability::Client::Client<PiperServerImpl, > void>(kj::Own<PiperServerImpl>&&) in main.cpp.o > "capnp::Capability::Server::internalUnimplemented(char const*, char > const*, unsigned long long, unsigned short)", referenced from: > > piper::rpc::Piper::Server::list(capnp::CallContext<piper::rpc::Piper::ListParams, > piper::rpc::Piper::ListResults>) in piper.rpc.capnp.c++.o > > piper::rpc::Piper::Server::load(capnp::CallContext<piper::rpc::Piper::LoadParams, > piper::rpc::Piper::LoadResults>) in piper.rpc.capnp.c++.o > piper::rpc::Piper::Server::configure(capnp::CallContext< > piper::rpc::Piper::ConfigureParams, piper::rpc::Piper::ConfigureResults>) > in piper.rpc.capnp.c++.o > piper::rpc::Piper::Server::process(capnp::CallContext< > piper::rpc::Piper::ProcessParams, piper::rpc::Piper::ProcessResults>) in > piper.rpc.capnp.c++.o > piper::rpc::Piper::Server::finish(capnp::CallContext< > piper::rpc::Piper::FinishParams, piper::rpc::Piper::FinishResults>) in > piper.rpc.capnp.c++.o > "capnp::Capability::Server::internalUnimplemented(char const*, unsigned > long long)", referenced from: > piper::rpc::Piper::Server::dispatchCall(unsigned long long, > unsigned short, capnp::CallContext<capnp::AnyPointer, capnp::AnyPointer>) > in piper.rpc.capnp.c++.o > "capnp::Capability::Server::internalUnimplemented(char const*, unsigned > long long, unsigned short)", referenced from: > piper::rpc::Piper::Server::dispatchCallInternal(unsigned short, > capnp::CallContext<capnp::AnyPointer, capnp::AnyPointer>) in > piper.rpc.capnp.c++.o > "capnp::EzRpcServer::getWaitScope()", referenced from: > _main in main.cpp.o > "capnp::EzRpcServer::EzRpcServer(capnp::Capability::Client, > kj::StringPtr, unsigned int, capnp::ReaderOptions)", referenced from: > _main in main.cpp.o > "capnp::EzRpcServer::~EzRpcServer()", referenced from: > _main in main.cpp.o > "kj::_::NeverDone::wait(kj::WaitScope&) const", referenced from: > _main in main.cpp.o > ld: symbol(s) not found for architecture x86_64 > clang: error: linker command failed with exit code 1 (use -v to see > invocation) > make[2]: *** [../bin/piper_server] Error 1 > make[1]: *** [CMakeFiles/piper_server.dir/all] Error 2 > make: *** [all] Error 2 > > My CMakeLists.txt file is as follows: > > cmake_minimum_required(VERSION 3.9.1) > > project(PiperServer) > > set(PiperServer_VERSION_MAJOR 1) > set(PiperServer_VERSION_MINOR 0) > > set(CMAKE_CXX_COMPILER clang++) > set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ -v") > set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++") > > set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin) > set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) > set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}) > > set(SOURCE_DIR ${PROJECT_SOURCE_DIR}/src) > set(DEV_DIR "/Users/burt/Development") > set(PIPER_DIR "${DEV_DIR}/go/src/github.com/brentmurphy/piper") > > include_directories("/usr/local/include") > include_directories("${PIPER_DIR}") > > find_library(libkj_location NAMES libkj.a) > add_library(libkj STATIC IMPORTED) > set_target_properties(libkj PROPERTIES IMPORTED_LOCATION ${libkj_location}) > > find_library(libcapnp_location NAMES libcapnp.a) > add_library(libcapnp STATIC IMPORTED) > set_target_properties(libcapnp PROPERTIES IMPORTED_LOCATION > ${libcapnp_location}) > > file(GLOB SOURCES "${PIPER_DIR}/*.c++") > > add_executable(piper_server ${SOURCE_DIR}/main.cpp ${SOURCES}) > > target_link_libraries( piper_server libkj libcapnp ) > > > And my server code (src/main.cpp): > > Enter code here#include <stdio.h> > #include <string.h> > #include <capnp/ez-rpc.h> > #include <capnp/message.h> > #include <capnp/serialize-packed.h> > #include <kj/debug.h> > #include <iostream> > > #include "piper.capnp.h" > #include "piper.rpc.capnp.h" > > class PiperServerImpl final: public ::piper::rpc::Piper::Server { > public: > ::kj::Promise<void> list(ListContext context) override { > return NULL; > } > > ::kj::Promise<void> load(LoadContext context) override { > return NULL; > } > > ::kj::Promise<void> configure(ConfigureContext context) override { > return NULL; > } > > ::kj::Promise<void> process(ProcessContext context) override { > return NULL; > } > > ::kj::Promise<void> finish(FinishContext context) override { > return NULL; > } > > private: > }; > > int main(int argc, const char* argv[]) { > // We expect one argument specifying the address to which > // to bind and accept connections. > if (argc != 2) { > std::cerr << "usage: " << argv[0] << " ADDRESS[:PORT]" > << std::endl; > return 1; > } > > // Set up the EzRpcServer, binding to port 5923 unless a > // different port was specified by the user. Note that the > // first parameter here can be any "Client" object or anything > // that can implicitly cast to a "Client" object. You can even > // re-export a capability imported from another server. > capnp::EzRpcServer server(kj::heap<PiperServerImpl>(), argv[1], 5923); > auto& waitScope = server.getWaitScope(); > > // Run forever, accepting connections and handling requests. > kj::NEVER_DONE.wait(waitScope); > KJ_LOG(ERROR, "dasdas"); > } > ... > > > -- > You received this message because you are subscribed to the Google Groups > "Cap'n Proto" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > Visit this group at https://groups.google.com/group/capnproto. > -- You received this message because you are subscribed to the Google Groups "Cap'n Proto" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. Visit this group at https://groups.google.com/group/capnproto.
