2012-07-19 40 views
2

我正在使用Mysql 5.5,插件需要查詢一個thrift接口服務器的一些信息。我創建基本上打開到服務器的連接,獲得一個狀態,然後關閉連接節儉客戶端:可能在mysql插件中使用節儉?

#include "../../xxxx/gen-cpp/Xxxx.h" 
#include <transport/TSocket.h> 
#include <transport/TBufferTransports.h> 
#include <protocol/TBinaryProtocol.h> 

using namespace apache::thrift; 
using namespace apache::thrift::protocol; 
using namespace apache::thrift::transport; 

using namespace ::za::co::xxxx; 

int main(int argc, char **argv) { 
    boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090)); 
    boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket)); 
    boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport)); 

    XxxxServiceClient client(protocol); 
    transport->open(); 
    client.getStatus(); 
    transport->close(); 

    return 0; 
} 

我再改的main()的函數名並將其添加到插件代碼文件和從主函數中調用它。 插件代碼建立罰款,但地圖現在包含了一大堆節儉參考和嘗試加載的插件,我得到這個錯誤:

ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/libxxxx.so' (errno: 13 undefined symbol: _ZTVN6apache6thrift9transport18TBufferedTransportE)

有沒有什麼辦法讓解決這些新節儉引用在安裝插件?它安裝並運行正常,沒有上述代碼。

回答

0

使用節儉的cpp教程代碼我能夠創造出了一個客戶端調用CppServer工藝簡單的Hello World MySQL守護進程插件:

#include <mysql/plugin.h> 
#include <mysql_version.h> 

#include <protocol/TBinaryProtocol.h> 
#include <transport/TSocket.h> 
#include <transport/TTransportUtils.h> 

#include "gen-cpp/Calculator.h" 

using namespace apache::thrift; 
using namespace apache::thrift::protocol; 
using namespace apache::thrift::transport; 

using namespace tutorial; 
using namespace shared; 

using namespace boost; 

static int hello_world_plugin_init(void *p) { 

    shared_ptr<TTransport> socket(new TSocket("localhost", 9090)); 
    shared_ptr<TTransport> transport(new TBufferedTransport(socket)); 
    shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport)); 

    CalculatorClient client(protocol); 

    transport->open(); 
    client.ping(); 
    transport->close(); 

    return 0; 
} 

而且這個Makefile:

BOOST_DIR = /usr/include/boost 
MYSQL_DIR = /usr/include/mysql 
THRIFT_DIR = /usr/local/include/thrift 
LIB_DIR = /usr/local/lib 

GEN_SRC = gen-cpp/SharedService.cpp gen-cpp/shared_types.cpp gen-cpp/tutorial_types.cpp gen-cpp/Calculator.cpp 
DEFS = -DMYSQL_DYNAMIC_PLUGIN -DHAVE_NETINET_IN_H 

default: hello_thrift.cc 
    g++ ${DEFS} -fPIC -shared -o libhellothrift.so -I${MYSQL_DIR} -I${THRIFT_DIR} -I${BOOST_DIR} -Igen-cpp -L${LIB_DIR} hello_thrift.cc ${GEN_SRC} -lthrift 

這只是示例代碼,並且如果Thrift CppServer未運行,將會使MySQL服務器崩潰。我使用gcc 4.6.3,MySQL 5.5.24,Thrift 0.8.0,Boost 1.46

我在Ubuntu 12.04 LTS上測試了這個