[poppler] Linking Poppler to Code::Blocks

Jason Crain jason at aquaticape.us
Mon Apr 29 22:48:56 PDT 2013


On Thu, Apr 25, 2013 at 01:21:13PM +0200, Christopher Icely wrote:
> Hi Jason,
> 
> That makes a bucket load of sense, I've been just linking to a generic
> "libpoppler.dll.a" file as opposed to the file you described -
> "lipoppler-cpp.ddl.a".
> 
> However the problem is, is that when I built codeblocks poppler project, it
> only created the "libpoppler.dll.a" and "libpoppler-qt4.dll.a" files. And
> while there is a cpp folder in the build directory it is only populated
> with folders that have to do with Cmake (CMakeFiles, cmake_install,
> CTestTestfile etc...).
> 
> Do you have any idea why this might be the case? Is it for example that the
> C++ front end needs particular dependencies and if Cmake doesn't find them
> it doesn't build the C++ front end? If so do you know what the dependencies
> are for the C++ front end?
> 
> Thank you for any help you can provide me.
> 
> Kind regards
> Chris

Sorry for the delay.  I have been without internet access for a few
days.  Also, please send your replies to the mailing list.

I don't know why it didn't build libpoppler-cpp.dll for you.  I just
tried with CMake and CodeBlocks on Windows and it built the library.

Yes, if the dependencies are not available, or if ENABLE_CPP is
disabled, it will not build the CPP frontend.  The only dependency I
am aware of is Iconv.  CMake should state whether the 'cpp wrapper' is
being built when you configure it.


> On Mon, Apr 22, 2013 at 4:46 AM, Jason Crain <jason at aquaticape.us> wrote:
> 
> > On Sat, Apr 20, 2013 at 08:20:42PM +0200, Christopher Icely wrote:
> > > Good Day All,
> > >
> > > Firstly, I do apologize if this is the incorrect forum in which to ask my
> > > questions however, I'm really at my wit's end with this problem and I was
> > > hoping one of you could perhaps help me.
> > >
> > > Basically I wish to write code that will allow me to extract annotations
> > > from PDFs. However, I'm yet to write any code as I've spent an inordinate
> > > amount of time in just getting Poppler built. These are the steps I've
> > > followed so far:
> > >
> > > {System specs: Windows 7, MinGW, CodeBlocks}
> > >
> > > 1) I have a folder structure like so:
> > >     C:\Users\Chris\Documents\Poppler\build\
> > >     ------------------------->poppler-0.22.2
> > >     ------------------------->poppler-0.22.2_Build
> > >
> > > The file "poppler-0.22.2" is the unzipped source files while the
> > > "poppler-0.22.2_Build" file was made by the Cmake GUI with Cairo, JPEG,
> > QT4
> > > and TIFF included. Furthermore, Cmake was instructed to generate a
> > > "CodeBlocks - MinGW Makefiles".
> > >
> > > 2) After the CodeBlocks project was generated by Cmake, the project was
> > > built in CodeBlocks and I was left with the following:
> > >
> > >     C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build\
> > >     -------------------------->CMakeFiles
> > >     -------------------------->cpp
> > >     -------------------------->poppler
> > >     -------------------------->qt4
> > >     -------------------------->test
> > >     -------------------------->utils
> > >     -------------------------->cmake_install.cmake
> > >     -------------------------->CMakeCache
> > >     -------------------------->config.h
> > >     -------------------------->CTestfile.cmake
> > >     -------------------------->libpoppler.dll
> > >     -------------------------->libpoppler.dll.a
> > >     -------------------------->Makefile
> > >     -------------------------->poppler.cbp
> > >     -------------------------->poppler.layout
> > >
> > > 3) Now i need to link the poppler library to my project. Therefore in
> > > CodeBlocks I did the following:
> > >
> > > a)Settings->Compiler->Linker settings: Link libraries
> > >     and I set the path to:
> > >
> > C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build\libpoppler.dll.a
> > >
> > > b)Then in  Settings->Compiler->Search directories->Linker
> > >     I set the path to:
> > > C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build\
> > >
> > > c)Then I set up the linking for my project:
> > >     Project->Build Options->Linker settings
> > >     and set the path to
> > >
> > C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build\libpoppler.dll.a
> > >
> > > d)And finally:
> > >     Project->Build Options->Search directories->Linker
> > >     and add the path:
> > > C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build\
> > >
> > > 4) I have now written the following code in my main.cpp just to see if
> > > everything works:
> > >
> > > 1 : #include <iostream>
> > > 2 : #include
> > >
> > "C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2\cpp\poppler-global.h"
> > > 3 : #include
> > >
> > "C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2\cpp\poppler-document.h"
> > > 4 :
> > > 5 : using namespace std;
> > > 6 :
> > > 7 : int main()
> > > 8 : {
> > > 9 :
> > > 10:
> > > 11:   const string dir =
> > > "C:\\Users\\Chris\\Documents\\WorkForDad\\2013\\Pdf Automation\\Anotation
> > > Extraction\\Remuneration Report.pdf";
> > > 12:
> > > 13:    poppler::document *doc = poppler::document::load_from_file(dir);
> > > 14:
> > > 15:    return 0;
> > > 16: }
> > >
> > > However, I get the following error in my"Build messages" when I build the
> > > code:
> > >
> > >
> > > C:\Users\Chris\Documents\WorkForDad\2013\Pdf
> > > Automation\Test\Clean\main.cpp||In function 'int main()':|
> > > C:\Users\Chris\Documents\WorkForDad\2013\Pdf
> > > Automation\Test\Clean\main.cpp|13|warning: unused variable 'doc'
> > > [-Wunused-variable]|
> > > obj\Debug\main.o||In function `main':|
> > > C:\Users\Chris\Documents\WorkForDad\2013\Pdf
> > > Automation\Test\Clean\main.cpp|13|undefined reference to
> > > `_imp___ZN7poppler8document14load_from_fileERKSsS2_S2_'|
> > > ||=== Build finished: 1 errors, 1 warnings (0 minutes, 1 seconds) ===|
> > >
> > >
> > > ###
> > >
> > >
> > > And in the "Build log" I get the following:
> > >
> > >
> > > -------------- Clean: Debug in Clean (compiler: GNU GCC
> > > Compiler)---------------
> > >
> > > Cleaned "Clean - Debug"
> > >
> > > -------------- Build: Debug in Clean (compiler: GNU GCC
> > > Compiler)---------------
> > >
> > > mingw32-g++.exe -Wall -fexceptions  -g  -g    -c
> > > "C:\Users\Chris\Documents\WorkForDad\2013\Pdf
> > > Automation\Test\Clean\main.cpp" -o obj\Debug\main.o
> > > C:\Users\Chris\Documents\WorkForDad\2013\Pdf
> > > Automation\Test\Clean\main.cpp: In function 'int main()':
> > > C:\Users\Chris\Documents\WorkForDad\2013\Pdf
> > > Automation\Test\Clean\main.cpp:13:24: warning: unused variable 'doc'
> > > [-Wunused-variable]
> > > mingw32-g++.exe -L..\..\..\..\..\Poppler\build\poppler-0.22.2_Build
> > > -LC:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build  -o
> > > bin\Debug\Clean.exe obj\Debug\main.o
> > > ..\..\..\..\..\Poppler\build\poppler-0.22.2_Build\libpoppler.dll.a
> > >
> > C:\Users\Chris\Documents\Poppler\build\poppler-0.22.2_Build\libpoppler.dll.a
> > >
> > > obj\Debug\main.o: In function `main':
> > > C:/Users/Chris/Documents/WorkForDad/2013/Pdf
> > > Automation/Test/Clean/main.cpp:13: *undefined reference to
> > > `_imp___ZN7poppler8document14load_from_fileERKSsS2_S2_'*
> > > collect2.exe: error: ld returned 1 exit status
> > > Process terminated with status 1 (0 minutes, 1 seconds)
> > > 1 errors, 1 warnings (0 minutes, 1 seconds)
> > >
> > >
> > >
> > > ###
> > >
> > >
> > > So as you can see, the problem would seem to be a linking error of some
> > > sort due to the presence of : "undefined reference to
> > > `_imp___ZN7poppler8document14load_from_fileERKSsS2_S2_'"
> > >
> > > Also, I have no idea what the "_imp__" + (random characters) means. From
> > > some research I've discovered that this "_imp__" problem has something to
> > > do with C to C++ code conversion however I have no idea if this is the
> > case
> > > now or how I would go out about fixing this problem.
> > >
> > > So there it all is, I hope someone can help me and I really appreciate
> > all
> > > of you who took the time to read the above and for any assistance you can
> > > provide me.
> > >
> > > Kind Regards
> > > Chris
> >
> > I'm not too familiar with Code::Blocks or compiling on Windows, but I
> > do know that poppler has separate frontends for C++, qt, and glib.  If
> > you are using the C++ frontend, you should be linking to the
> > libpoppler-cpp library.  I suppose on Windows the file would be named
> > cpp\libpoppler-cpp.dll.a.


More information about the poppler mailing list