Я пытаюсь использовать последнюю версию PicklingTools (http://www.picklingtools.com/) с QT Creator. Я просто хочу открыть маринованный образец файла, который я скачал вместе с файлами PicklingTools. Так что мой файл main.cpp выглядит очень просто:
#include <iostream>
#include "chooseser.h"
using namespace std;
int main()
{
Val result;
LoadValFromFile("../PicklingTools163Release/C++/SamplePickles/p7.pkl",result,SERIALIZE_P0);
return 0;
}
Я отредактировал файл .pro следующим образом:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp \
INCLUDEPATH += ../PicklingTools163Release/C++/
INCLUDEPATH += ../PicklingTools163Release/C++/opencontainers_1_8_4/include/
LIBS += -pthread
HEADERS += \
../PicklingTools163Release/C++/chooseser.h \
QMAKE_CXXFLAGS += -std=c++0x -pthread
QMAKE_CXXFLAGS += -fno-strict-aliasing -DLINUX_ -DOC_NEW_STYLE_INCLUDES -Wno-deprecated -I../PicklingTools163Release/C++/opencontainers_1_8_4/include -I../PicklingTools163Release/C++ -pthread -D_REENTRANT
В настоящий момент я получаю несколько неопределенных ошибок ссылок:
- Fehler: undefined reference to `OC::CopyPrintableBufferToVector(char const*, unsigned long, char*, unsigned long)'
- Fehler: undefined reference to `OC::P2TopLevelLoadVal(OC::Val&, char*)'
- Fehler: undefined reference to `OC::OpalLoadSomeTable(OC::Val&, char*, bool, OC::MachineRep_e)'
- Fehler: undefined reference to `OC::CopyPrintableBufferToVector(char const*, unsigned long, char*, unsigned long)'
- Fehler: undefined reference to `OC::MakeVector(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, char const*, unsigned long)'
Я думаю, что мне нужно отредактировать .pro
подать дальше, но сейчас я понятия не имею, как это сделать.
Код OpenContainers работает ТОЛЬКО ВКЛЮЧЕНО, т. Е. Вам не нужно ссылаться на что-либо, чтобы просто использовать код OpenContainers (OC :: Val, OC :: Tab и т. Д.). НО!
Чтобы использовать любой из кода Pickling (например, неопределенные записи, которые вы видите для P2TopLevelLoadVal
, MakeVector
и т. д.) вам нужно собрать и связать библиотеку ptools. Эта библиотека содержит весь код выбора Python.
% cd /home/me/PicklingTools163Release/C++
% make -f Makefile.Linux libptools.so
# .... builds a lot of files, and put them into libptools.so ....
# Update your Makefile to link against libptools.so
Надеюсь, это поможет. Ссылка против libptools.so
в вашем Makefile.
Других решений пока нет …