[poppler] Linking Poppler to Code::Blocks

Jason Crain jason at aquaticape.us
Sun Apr 21 19:46:13 PDT 2013


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