so it turns out that you cannot use podofo in a c++11 compilation unit because enums change sizes from 4 bytes to 1 byte. this macro makes the change:
// Visual C++ 2015 (_MSC_VER 1900) still uses __cplusplus = 199711 so, we need both tests // this shrinks enum types from sizeof(int) to sizeof(char) which creates significant // space savings on PdfObject / PdfVariant #if (defined(_MSC_VER) && _MSC_VER < 1900) || (!defined(_MSC_VER) && __cplusplus < 201103) #define PODOFO_ENUM_UINT8 #else #define PODOFO_ENUM_UINT8 : uint8_t #endif However, if you build podofo with c++11 disabled, all users of the lib have to be as well, and vice versa. Florian On 06/02/2017 01:52 AM, Florian Hänel wrote: > after debugging this issue some more I found that the class seems to > change layout/size between > > PdfVariant::Clear: > > this:0x7e47ba0 &m_bDelayedLoadDone: 0x7e47bb8 sizeof: 32 > > and > > inline void PdfVariant::DelayedLoad() const: > > this 0x7e47ba0 bDelayed: 0x7e47bb3 size: 24 > > seems like some member gets lost in the inline function, which causes > the delayedLoadDone member to appear uninitialized. > > > Florian > > > On 06/01/2017 11:54 PM, Florian Hänel wrote: >> I have built podofo 0.9.5 as a dynamic library on linux x64. >> >> the following code aborts in the PdfDocument constructor, but only if >> notcalled exists: >> >> #include "podofo/podofo.h" >> >> int main(int argc, char** argv) { >> printf("%s:%i\n",__FILE__,__LINE__); >> PoDoFo::PdfMemDocument* doc = new PoDoFo::PdfMemDocument(); // exception >> here >> printf("%s:%i\n",__FILE__,__LINE__); >> doc->Load("test2-annotated.pdf"); >> printf("%s:%i\n",__FILE__,__LINE__); >> } >> >> void notcalled(PoDoFo::PdfAnnotation* anno) { >> PoDoFo::PdfObject* obj = anno->GetObject(); >> printf("%i\n", obj->HasStream()); >> } >> >> if notcalled does *not* exist, it works as expected. >> >> >> $ g++ -std=gnu++11 podofotest.cpp -L build-podofo-0.9.5/src -l podofo -I >> podofo-0.9.5 -I build-podofo-0.9.5 >> >> LD_LIBRARY_PATH=build-podofo-0.9.5/src gdb ./a.out >> >> (gdb) bt >> #0 0x00007ffff7008428 in __GI_raise (sig=sig@entry=6) at >> ../sysdeps/unix/sysv/linux/raise.c:54 >> #1 0x00007ffff700a02a in __GI_abort () at abort.c:89 >> #2 0x00007ffff764184d in __gnu_cxx::__verbose_terminate_handler() () >> from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 >> #3 0x00007ffff763f6b6 in ?? () from >> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 >> #4 0x00007ffff763f701 in std::terminate() () from >> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 >> #5 0x00007ffff763f919 in __cxa_throw () from >> /usr/lib/x86_64-linux-gnu/libstdc++.so.6 >> #6 0x00007ffff7a7fd27 in PoDoFo::PdfVariant::DelayedLoadImpl() () from >> build-podofo-0.9.5/src/libpodofo.so.0.9.5 >> #7 0x00000000004015b2 in PoDoFo::PdfVariant::DelayedLoad() const () >> #8 0x00007ffff7a48d9a in PoDoFo::PdfVariant::GetDictionary() () from >> build-podofo-0.9.5/src/libpodofo.so.0.9.5 >> #9 0x00007ffff7a7e829 in >> PoDoFo::PdfObject::PdfObject(PoDoFo::PdfReference const&, char const*) >> () from build-podofo-0.9.5/src/libpodofo.so.0.9.5 >> #10 0x00007ffff7a9c67f in PoDoFo::PdfVecObjects::CreateObject(char >> const*) () from build-podofo-0.9.5/src/libpodofo.so.0.9.5 >> #11 0x00007ffff7ac48b3 in PoDoFo::PdfDocument::PdfDocument(bool) () from >> build-podofo-0.9.5/src/libpodofo.so.0.9.5 >> #12 0x00007ffff7b0bf6f in PoDoFo::PdfMemDocument::PdfMemDocument() () >> from build-podofo-0.9.5/src/libpodofo.so.0.9.5 >> #13 0x0000000000400c16 in main () >> >> >> clang++ and g++ behave the same. valgrind complains about an uninitialized >> value in the error case >> >> >> Florian >> >> >> ------------------------------------------------------------------------------ >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> _______________________________________________ >> Podofo-users mailing list >> Podofo-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/podofo-users > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Podofo-users mailing list > Podofo-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/podofo-users ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Podofo-users mailing list Podofo-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/podofo-users