Build cpp cpp error code

I am new to Thrift. I think I installed it correctly. I have the following libs:

luckyan315@ubuntu :~/code/thrift-0.8.0/tutorial/cpp$ ll /usr/local/lib/ total 11496 drwxr-xr-x 4 root root 4096 Mar 23 19:35 ./ drwxr-xr-x 10 root root 4096 Oct 12 22:27 ../ -rwxr-xr-x 1 root root 4100463 Mar 31 20:26 libthrift-0.8.0.so* -rw-r--r-- 1 root root 7256552 Mar 31 20:26 libthrift.a -rwxr-xr-x 1 root root 991 Mar 31 20:26 libthrift.la* lrwxrwxrwx 1 root root 18 Mar 23 19:35 libthrift.so -> libthrift-0.8.0.so* -rwxr-xr-x 1 root root 160727 Mar 31 20:26 libthriftz-0.8.0.so* -rw-r--r-- 1 root root 218290 Mar 31 20:26 libthriftz.a -rwxr-xr-x 1 root root 998 Mar 31 20:26 libthriftz.la* lrwxrwxrwx 1 root root 19 Mar 23 19:35 libthriftz.so -> libthriftz-0.8.0.so* 

Then I tried to compile the cppClient tutorial, but I have an undefined reference to the following errors:

 luckyan315@ubuntu :~/code/thrift-0.8.0/tutorial/cpp$ sudo g++ -DHAVE_NETINET_IN_H -o Server -I/usr/local/include/thrift/ -I/usr/local/boost/include/boost-1_33_1/ -I../gen-cpp -L/usr/local/lib/ -lthrift CppServer.cpp ../gen-cpp/SharedService.cpp ../gen-cpp/shared_types.cpp ../gen-cpp/tutorial_types.cpp ../gen-cpp/Calculator.cpp /tmp/cc7lnwSw.o: In function `main': CppServer.cpp:(.text+0xd1): undefined reference to `apache::thrift::transport::TServerSocket::TServerSocket(int)' CppServer.cpp:(.text+0x15f): undefined reference to `apache::thrift::server::TSimpleServer::serve()' /tmp/cc7lnwSw.o: In function `apache::thrift::server::TSimpleServer::~TSimpleServer()': CppServer.cpp:(.text._ZN6apache6thrift6server13TSimpleServerD2Ev[_ZN6apache6thrift6server13TSimpleServerD5Ev]+0xb): undefined reference to `vtable for apache::thrift::server::TSimpleServer' /tmp/cc7lnwSw.o: In function `apache::thrift::transport::TBufferedTransport::TBufferedTransport(boost::shared_ptr<apache::thrift::transport::TTransport>)': CppServer.cpp:(.text._ZN6apache6thrift9transport18TBufferedTransportC2EN5boost10shared_ptrINS1_10TTransportEEE[_ZN6apache6thrift9transport18TBufferedTransportC5EN5boost10shared_ptrINS1_10TTransportEEE]+0x17): undefined reference to `vtable for apache::thrift::transport::TBufferedTransport' /tmp/cc7lnwSw.o: In function `apache::thrift::server::TSimpleServer::TSimpleServer<apache::thrift::TProcessor>(boost::shared_ptr<apache::thrift::TProcessor> const&, boost::shared_ptr<apache::thrift::transport::TServerTransport> const&, boost::shared_ptr<apache::thrift::transport::TTransportFactory> const&, boost::shared_ptr<apache::thrift::protocol::TProtocolFactory> const&, boost::enable_if<boost::is_convertible<apache::thrift::TProcessor*, apache::thrift::TProcessor*>::type, void*>::type)': CppServer.cpp:(.text._ZN6apache6thrift6server13TSimpleServerC2INS0_10TProcessorEEERKN5boost10shared_ptrIT_EERKNS6_INS0_9transport16TServerTransportEEERKNS6_INSB_17TTransportFactoryEEERKNS6_INS0_8protocol16TProtocolFactoryEEENS5_9enable_ifINS5_14is_convertibleIPS7_PS4_E4typeEPvE4typeE[_ZN6apache6thrift6server13TSimpleServerC5INS0_10TProcessorEEERKN5boost10shared_ptrIT_EERKNS6_INS0_9transport16TServerTransportEEERKNS6_INSB_17TTransportFactoryEEERKNS6_INS0_8protocol16TProtocolFactoryEEENS5_9enable_ifINS5_14is_convertibleIPS7_PS4_E4typeEPvE4typeE]+0x3a): undefined reference to `vtable for apache::thrift::server::TSimpleServer' /tmp/cc7lnwSw.o: In function `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::writeMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, apache::thrift::protocol::TMessageType, int)': CppServer.cpp:(.text._ZN6apache6thrift8protocol16TBinaryProtocolTINS0_9transport10TTransportEE17writeMessageBeginERKSsNS1_12TMessageTypeEi[apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::writeMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, apache::thrift::protocol::TMessageType, int)]+0x15): undefined reference to `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::VERSION_1' /tmp/cc7lnwSw.o: In function `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, apache::thrift::protocol::TMessageType&, int&)': CppServer.cpp:(.text._ZN6apache6thrift8protocol16TBinaryProtocolTINS0_9transport10TTransportEE16readMessageBeginERSsRNS1_12TMessageTypeERi[apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, apache::thrift::protocol::TMessageType&, int&)]+0x33): undefined reference to `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::VERSION_MASK' CppServer.cpp:(.text._ZN6apache6thrift8protocol16TBinaryProtocolTINS0_9transport10TTransportEE16readMessageBeginERSsRNS1_12TMessageTypeERi[apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, apache::thrift::protocol::TMessageType&, int&)]+0x3d): undefined reference to `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::VERSION_1' /tmp/ccBkDvwC.o: In function `shared::SharedServiceClient::recv_getStruct(shared::SharedStruct&)': SharedService.cpp:(.text+0x6f3): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccBkDvwC.o: In function `shared::SharedServiceProcessor::process(boost::shared_ptr<apache::thrift::protocol::TProtocol>, boost::shared_ptr<apache::thrift::protocol::TProtocol>, void*)': SharedService.cpp:(.text+0xb05): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccBkDvwC.o: In function `shared::SharedServiceProcessor::process_fn(apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, void*)': SharedService.cpp:(.text+0xd87): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccBkDvwC.o: In function `shared::SharedServiceProcessor::process_getStruct(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': SharedService.cpp:(.text+0x1409): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorClient::recv_ping()': Calculator.cpp:(.text+0x12af): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorClient::recv_add()': Calculator.cpp:(.text+0x173b): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorClient::recv_calculate()': Calculator.cpp:(.text+0x1c7b): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process(boost::shared_ptr<apache::thrift::protocol::TProtocol>, boost::shared_ptr<apache::thrift::protocol::TProtocol>, void*)': Calculator.cpp:(.text+0x227f): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process_ping(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': Calculator.cpp:(.text+0x298e): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process_add(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': Calculator.cpp:(.text+0x2f9b): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process_calculate(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': Calculator.cpp:(.text+0x3609): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' collect2: ld returned 1 exit status 0x3a): undefined reference to `vtable for apache :: thrift :: server :: TSimpleServer ' luckyan315@ubuntu :~/code/thrift-0.8.0/tutorial/cpp$ sudo g++ -DHAVE_NETINET_IN_H -o Server -I/usr/local/include/thrift/ -I/usr/local/boost/include/boost-1_33_1/ -I../gen-cpp -L/usr/local/lib/ -lthrift CppServer.cpp ../gen-cpp/SharedService.cpp ../gen-cpp/shared_types.cpp ../gen-cpp/tutorial_types.cpp ../gen-cpp/Calculator.cpp /tmp/cc7lnwSw.o: In function `main': CppServer.cpp:(.text+0xd1): undefined reference to `apache::thrift::transport::TServerSocket::TServerSocket(int)' CppServer.cpp:(.text+0x15f): undefined reference to `apache::thrift::server::TSimpleServer::serve()' /tmp/cc7lnwSw.o: In function `apache::thrift::server::TSimpleServer::~TSimpleServer()': CppServer.cpp:(.text._ZN6apache6thrift6server13TSimpleServerD2Ev[_ZN6apache6thrift6server13TSimpleServerD5Ev]+0xb): undefined reference to `vtable for apache::thrift::server::TSimpleServer' /tmp/cc7lnwSw.o: In function `apache::thrift::transport::TBufferedTransport::TBufferedTransport(boost::shared_ptr<apache::thrift::transport::TTransport>)': CppServer.cpp:(.text._ZN6apache6thrift9transport18TBufferedTransportC2EN5boost10shared_ptrINS1_10TTransportEEE[_ZN6apache6thrift9transport18TBufferedTransportC5EN5boost10shared_ptrINS1_10TTransportEEE]+0x17): undefined reference to `vtable for apache::thrift::transport::TBufferedTransport' /tmp/cc7lnwSw.o: In function `apache::thrift::server::TSimpleServer::TSimpleServer<apache::thrift::TProcessor>(boost::shared_ptr<apache::thrift::TProcessor> const&, boost::shared_ptr<apache::thrift::transport::TServerTransport> const&, boost::shared_ptr<apache::thrift::transport::TTransportFactory> const&, boost::shared_ptr<apache::thrift::protocol::TProtocolFactory> const&, boost::enable_if<boost::is_convertible<apache::thrift::TProcessor*, apache::thrift::TProcessor*>::type, void*>::type)': CppServer.cpp:(.text._ZN6apache6thrift6server13TSimpleServerC2INS0_10TProcessorEEERKN5boost10shared_ptrIT_EERKNS6_INS0_9transport16TServerTransportEEERKNS6_INSB_17TTransportFactoryEEERKNS6_INS0_8protocol16TProtocolFactoryEEENS5_9enable_ifINS5_14is_convertibleIPS7_PS4_E4typeEPvE4typeE[_ZN6apache6thrift6server13TSimpleServerC5INS0_10TProcessorEEERKN5boost10shared_ptrIT_EERKNS6_INS0_9transport16TServerTransportEEERKNS6_INSB_17TTransportFactoryEEERKNS6_INS0_8protocol16TProtocolFactoryEEENS5_9enable_ifINS5_14is_convertibleIPS7_PS4_E4typeEPvE4typeE]+0x3a): undefined reference to `vtable for apache::thrift::server::TSimpleServer' /tmp/cc7lnwSw.o: In function `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::writeMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, apache::thrift::protocol::TMessageType, int)': CppServer.cpp:(.text._ZN6apache6thrift8protocol16TBinaryProtocolTINS0_9transport10TTransportEE17writeMessageBeginERKSsNS1_12TMessageTypeEi[apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::writeMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, apache::thrift::protocol::TMessageType, int)]+0x15): undefined reference to `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::VERSION_1' /tmp/cc7lnwSw.o: In function `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, apache::thrift::protocol::TMessageType&, int&)': CppServer.cpp:(.text._ZN6apache6thrift8protocol16TBinaryProtocolTINS0_9transport10TTransportEE16readMessageBeginERSsRNS1_12TMessageTypeERi[apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, apache::thrift::protocol::TMessageType&, int&)]+0x33): undefined reference to `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::VERSION_MASK' CppServer.cpp:(.text._ZN6apache6thrift8protocol16TBinaryProtocolTINS0_9transport10TTransportEE16readMessageBeginERSsRNS1_12TMessageTypeERi[apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::readMessageBegin(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, apache::thrift::protocol::TMessageType&, int&)]+0x3d): undefined reference to `apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TTransport>::VERSION_1' /tmp/ccBkDvwC.o: In function `shared::SharedServiceClient::recv_getStruct(shared::SharedStruct&)': SharedService.cpp:(.text+0x6f3): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccBkDvwC.o: In function `shared::SharedServiceProcessor::process(boost::shared_ptr<apache::thrift::protocol::TProtocol>, boost::shared_ptr<apache::thrift::protocol::TProtocol>, void*)': SharedService.cpp:(.text+0xb05): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccBkDvwC.o: In function `shared::SharedServiceProcessor::process_fn(apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, int, void*)': SharedService.cpp:(.text+0xd87): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccBkDvwC.o: In function `shared::SharedServiceProcessor::process_getStruct(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': SharedService.cpp:(.text+0x1409): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorClient::recv_ping()': Calculator.cpp:(.text+0x12af): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorClient::recv_add()': Calculator.cpp:(.text+0x173b): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorClient::recv_calculate()': Calculator.cpp:(.text+0x1c7b): undefined reference to `apache::thrift::TApplicationException::read(apache::thrift::protocol::TProtocol*)' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process(boost::shared_ptr<apache::thrift::protocol::TProtocol>, boost::shared_ptr<apache::thrift::protocol::TProtocol>, void*)': Calculator.cpp:(.text+0x227f): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process_ping(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': Calculator.cpp:(.text+0x298e): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process_add(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': Calculator.cpp:(.text+0x2f9b): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' /tmp/ccLRxoVZ.o: In function `tutorial::CalculatorProcessor::process_calculate(int, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, void*)': Calculator.cpp:(.text+0x3609): undefined reference to `apache::thrift::TApplicationException::write(apache::thrift::protocol::TProtocol*) const' collect2: ld returned 1 exit status 
+6
source share
3 answers

The -lthrift parameter should be at the end of the command line after the cpp files.

I successfully compiled a Ubuntu 11.10 / gcc 4.6.1 / boost 1.49 sample with the following make file:

 THRIFT_VER =thrift-0.8.0 USR_DIR =${HOME}/usr THRIFT_DIR =${USR_DIR}/${THRIFT_VER} INCS_DIRS =-I${USR_DIR}/include -I${THRIFT_DIR}/include/thrift LIBS_DIRS =-L${USR_DIR}/lib -L${USR_DIR}/${THRIFT_VER}/lib CPP_DEFS =-D=HAVE_CONFIG_H CPP_OPTS =-Wall -O2 LIBS =-lthrift GEN_SRC = ../gen-cpp/SharedService.cpp \ ../gen-cpp/shared_types.cpp \ ../gen-cpp/tutorial_types.cpp \ ../gen-cpp/Calculator.cpp GEN_INC = -I../gen-cpp default: server client server: CppServer.cpp g++ ${CPP_OPTS} ${CPP_DEFS} -o CppServer ${GEN_INC} ${INCS_DIRS} CppServer.cpp ${GEN_SRC} ${LIBS_DIRS} ${LIBS} client: CppClient.cpp g++ ${CPP_OPTS} ${CPP_DEFS} -o CppClient ${GEN_INC} ${INCS_DIRS} CppClient.cpp ${GEN_SRC} ${LIBS_DIRS} ${LIBS} clean: $(RM) -r CppClient CppServer 

Try putting tabs at the top of the make commands.

My layout:

boost 1.49 is set to $ {HOME} / usr
increase headers in $ {HOME} / usr / include
boost libs in $ {HOME} / usr / lib

thrifty 0.8.0 set to $ {HOME} /usr/thrift-0.8.0
in the header headers in $ {HOME} /usr/thrift-0.8.0/include
trift libs at $ {HOME} /usr/thrift-0.8.0/lib

To run samples:

 #!/bin/bash THRIFT_VER=thrift-0.8.0 USR_DIR=${HOME}/usr THRIFT_DIR=${USR_DIR}/${THRIFT_VER} export LD_LIBRARY_PATH=${THRIFT_DIR}/lib:${LD_LIBRARY_PATH} exec $1 
+8
source

after some searching, I can find the reason ... This is because your version of g ++ ... In short, working gcc:

g ++ 4.4.6: OK g ++ 4.5.3: OK g ++ 4.6.1: complains about an undefined link to

links: http://mail-archives.apache.org/mod_mbox/thrift-user/201107.mbox/% 3C4E321FD6.4090503@verizon.net % 3E

http://mail-archives.apache.org/mod_mbox/thrift-dev/201107.mbox/% 3C4E3161D1.3090509@ens-lyon.fr % 3E

0
source

Here is an example for Os X.

First install the dependencies and thrift, the easiest way to do it with brew :

 brew install boost brew install thrift 

Please note that if you have already tried to set the thrift manually, you may have to remove it first.

Download the tab and compile the tutorial:

 cd ./thrift-0.8.0/tutorial thrift --gen cpp ./tutorial.thrift cd ./cpp 

Replace the existing Makefile with the following (based on the jedf solution):

 THRIFT_VER =thrift/0.8.0 USR_DIR =/usr/local/Cellar THRIFT_DIR =${USR_DIR}/${THRIFT_VER} INCS_DIRS =-I${USR_DIR}/include -I${THRIFT_DIR}/include/thrift -I${USR_DIR}/boost/1.49.0/include/boost LIBS_DIRS =-L${USR_DIR}/${THRIFT_VER}/lib CPP_DEFS =-D=HAVE_CONFIG_H CPP_OPTS =-Wall -O2 LIBS =-lthrift GEN_SRC = ../gen-cpp/SharedService.cpp \ ../gen-cpp/shared_types.cpp \ ../gen-cpp/tutorial_types.cpp \ ../gen-cpp/Calculator.cpp GEN_INC = -I../gen-cpp default: server client server: CppServer.cpp g++ ${CPP_OPTS} ${CPP_DEFS} -o CppServer ${GEN_INC} ${INCS_DIRS} CppServer.cpp ${GEN_SRC} ${LIBS_DIRS} ${LIBS} client: CppClient.cpp g++ ${CPP_OPTS} ${CPP_DEFS} -o CppClient ${GEN_INC} ${INCS_DIRS} CppClient.cpp ${GEN_SRC} ${LIBS_DIRS} ${LIBS} clean: $(RM) -r CppClient CppServer 

Compile:

 make 

Start the server and client:

 ./CppServer ./CppClient 

Also, whenever you need to compile third-party code that requires cost savings, use the following:

 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/Cellar/thrift/0.8.0/lib/pkgconfig/ 
0
source

Source: https://habr.com/ru/post/912123/


All Articles