Всем привет!
Пытаюсь создать клиент по примеру —
https://thrift.apache.org/tutorial/cpp.
Возникает несколько ошибок:
— main.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual __thiscall apache::thrift::protocol::TProtocol::~TProtocol(void)" (??1TProtocol@protocol@thrift@apache@@UAE@XZ)"
— main.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual unsigned int __thiscall apache::thrift::protocol::TProtocol::skip_virt(enum apache::thrift::protocol::TType)" (?skip_virt@TProtocol@protocol@thrift@apache@@UAEIW4TType@234@@Z)"
— libthrift.lib(TSocket.obj):-1: ошибка: LNK2001: неразрешенный внешний символ ""class apache::thrift::TOutput apache::thrift::GlobalOutput" (?GlobalOutput@thrift@apache@@3VTOutput@12@A)"
— libthrift.lib(TSocket.obj):-1: ошибка: LNK2001: неразрешенный внешний символ ""public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl apache::thrift::TOutput::strerror_s(int)" (?strerror_s@TOutput@thrift@apache@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z)"
— libthrift.lib(TSocket.obj):-1: ошибка: LNK2001: неразрешенный внешний символ ""public: void __thiscall apache::thrift::TOutput::perror(char const *,int)" (?perror@TOutput@thrift@apache@@QAEXPBDH@Z)"
В файле .pro прописаны все папки к библиотекам
INCLUDEPATH += ".../gen-cpp"
INCLUDEPATH += ".../thrift"
INCLUDEPATH += ".../boost"
LIBS += -
LC:/boost/stage/lib -llibboost_system-vc120-mt-gd-1_60
Прописаны пути к библиотекам трифта libthrift и libthriftnb:
LIBS += -
LC:/Thrift/thrift-0.9.3/thrift-0.9.3/lib/cpp/Release -llibthriftnb
LIBS += -
LC:/Thrift/thrift-0.9.3/thrift-0.9.3/lib/cpp/Release -llibthrift
Библиотеки собраны компилятором MSVC. Клиент собираю тоже MSVC. Сервер запущен.
Здравствуйте, Myafka, Вы писали:
M>Всем привет!
M>Пытаюсь создать клиент по примеру — https://thrift.apache.org/tutorial/cpp.
M>Возникает несколько ошибок:
M>- main.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual __thiscall apache::thrift::protocol::TProtocol::~TProtocol(void)" (??1TProtocol@protocol@thrift@apache@@UAE@XZ)"
M>...
1) из *.pro файла делаешь Makefile или проект студии?
2) в Makefile/проекте проверить что либа llibthrift действительно в списке либ для линковки.
3) проверить список символов в llibthrift. (с помощью dumpbin).
Найти в нем символ ??1TProtocol@protocol@thrift@apache@@UAE@XZ.
Если символа не, то поискать похожий (отличающийся одной-двумя буквами), это означает что библиотека собрана с другими опциями компилятора.
Здравствуйте, Chorkov, Вы писали:
C>Здравствуйте, Myafka, Вы писали:
M>>Всем привет!
M>>Пытаюсь создать клиент по примеру — https://thrift.apache.org/tutorial/cpp.
M>>Возникает несколько ошибок:
M>>- main.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual __thiscall apache::thrift::protocol::TProtocol::~TProtocol(void)" (??1TProtocol@protocol@thrift@apache@@UAE@XZ)"
M>>...
C>1) из *.pro файла делаешь Makefile или проект студии?
C>2) в Makefile/проекте проверить что либа llibthrift действительно в списке либ для линковки.
C>3) проверить список символов в llibthrift. (с помощью dumpbin).
C> Найти в нем символ ??1TProtocol@protocol@thrift@apache@@UAE@XZ.
C> Если символа не, то поискать похожий (отличающийся одной-двумя буквами), это означает что библиотека собрана с другими опциями компилятора.
1) Makefile
2) библиотека libthrift есть в списке библиотек для линковки
3) Такого символа нет (??1TProtocol@protocol@thrift@apache@@UAE@XZ), но есть похожий.
Спасибо. Я так понимаю надо пересобрать библиотеку.
Здравствуйте, Myafka, Вы писали:
M>Здравствуйте, Chorkov, Вы писали:
C>>Здравствуйте, Myafka, Вы писали:
M>>>Всем привет!
M>>>Пытаюсь создать клиент по примеру — https://thrift.apache.org/tutorial/cpp.
M>>>Возникает несколько ошибок:
M>>>- main.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual __thiscall apache::thrift::protocol::TProtocol::~TProtocol(void)" (??1TProtocol@protocol@thrift@apache@@UAE@XZ)"
M>>>...
C>>1) из *.pro файла делаешь Makefile или проект студии?
C>>2) в Makefile/проекте проверить что либа llibthrift действительно в списке либ для линковки.
C>>3) проверить список символов в llibthrift. (с помощью dumpbin).
C>> Найти в нем символ ??1TProtocol@protocol@thrift@apache@@UAE@XZ.
C>> Если символа не, то поискать похожий (отличающийся одной-двумя буквами), это означает что библиотека собрана с другими опциями компилятора.
M>1) Makefile
M>2) библиотека libthrift есть в списке библиотек для линковки
M>3) Такого символа нет (??1TProtocol@protocol@thrift@apache@@UAE@XZ), но есть похожий.
M>Спасибо. Я так понимаю надо пересобрать библиотеку.