[poppler] Static build
Ranjan Ghosh
ghosh at pw6.de
Wed Dec 5 19:24:32 UTC 2018
Hm. I tried to follow your advice and after fighting through a multitude
of additional libraries that were missing, I now configure pdf2svg with
this script:
#!/bin/bash
export CFLAGS="-static -lm -pthread "`pkg-config --cflags --static
freetype2 poppler-cpp cairo lcms2 libtiff-4 libffi pixman-1 glib-2.0
libpcre`
export LDFLAGS="-static -lm -pthread "`pkg-config --libs --static
freetype2 poppler-cpp cairo lcms2 libtiff-4 libffi pixman-1 glib-2.0
libpcre`
./configure
===
But, unfortunately, when running "make" I get this (especially I dont
understand the missing sqrt because I specifically said lm; there are
more weird errors about missing I'm just posting the first lines here):
gcc -I/usr/include/cairo -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/uuid
-I/usr/local/include/poppler/glib -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/cairo
-I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/uuid -I/usr/local/include/poppler -static -lm -pthread
-I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/local/include/poppler/cpp -I/usr/local/include/poppler
-I/usr/include/cairo -I/usr/include/glib-2.0
-I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/uuid -I/usr/local/include
-I/usr/include/x86_64-linux-gnu -static -lm -pthread -lz -lm -lm -lz
-L/usr/local/lib -lpoppler-cpp -L/usr/local/lib -lpoppler -lcairo -lz
-lz -lz -lgobject-2.0 -pthread -lpcre -lpcre -pthread -lglib-2.0
-pthread -lpcre -lpcre -pthread -lpixman-1 -lfontconfig -lz -lm -lm -lz
-luuid -lexpat -lfreetype -lz -lm -lm -lz -lpng16 -lm -lm -lz -lxcb-shm
-lxcb -lxcb-render -lxcb -lXrender -lX11 -lpthread -lxcb -lpthread -lxcb
-lX11 -lpthread -lxcb -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp -llcms2
-lm -lpthread -ltiff -llzma -ljbig -ljpeg -lz -lm -lffi -lpixman-1
-lglib-2.0 -pthread -lpcre -lpcre -pthread -o pdf2svg pdf2svg-pdf2svg.o
-lcairo -L/usr/local/lib -lpoppler-glib -lgobject-2.0 -lglib-2.0 -lcairo
/usr/bin/ld:
/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o):
in function `g_get_user_database_entry':
(.text+0x277): warning: Using 'getpwuid' in statically linked
applications requires at runtime the shared libraries from the glibc
version used for linking
/usr/bin/ld: (.text+0xe0): warning: Using 'getpwnam_r' in statically
linked applications requires at runtime the shared libraries from the
glibc version used for linking
/usr/bin/ld: (.text+0x11e): warning: Using 'getpwuid_r' in statically
linked applications requires at runtime the shared libraries from the
glibc version used for linking
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoOutputDev::~CairoOutputDev()':
CairoOutputDev.cc:(.text+0x1b9): undefined reference to `operator
delete(void*, unsigned long)'
/usr/bin/ld: CairoOutputDev.cc:(.text+0x226): undefined reference to
`TextPage::decRefCnt()'
/usr/bin/ld: CairoOutputDev.cc:(.text+0x23a): undefined reference to
`ActualText::~ActualText()'
/usr/bin/ld: CairoOutputDev.cc:(.text+0x247): undefined reference to
`operator delete(void*, unsigned long)'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoOutputDev::startPage(int, GfxState*, XRef*)':
CairoOutputDev.cc:(.text+0x2fd): undefined reference to
`TextPage::startPage(GfxState*)'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoOutputDev::endPage()':
CairoOutputDev.cc:(.text+0x334): undefined reference to
`TextPage::endPage()'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoOutputDev::saveState(GfxState*)':
CairoOutputDev.cc:(.text+0x38c): undefined reference to `operator
new(unsigned long)'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoOutputDev::restoreState(GfxState*)':
CairoOutputDev.cc:(.text+0x4fb): undefined reference to `operator
delete(void*, unsigned long)'
/usr/bin/ld: CairoOutputDev.cc:(.text+0x51d): undefined reference to
`GfxPath::~GfxPath()'
/usr/bin/ld: CairoOutputDev.cc:(.text+0x52a): undefined reference to
`operator delete(void*, unsigned long)'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoImageOutputDev::~CairoImageOutputDev()':
CairoOutputDev.cc:(.text+0x5d0): undefined reference to `operator
delete(void*, unsigned long)'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `CairoOutputDev::updateFont(GfxState*)':
CairoOutputDev.cc:(.text+0xb13): undefined reference to
`TextPage::updateFont(GfxState*)'
/usr/bin/ld: CairoOutputDev.cc:(.text+0xca3): undefined reference to
`error(ErrorCategory, long long, char const*, ...)'
/usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoOutputDev.cc.o): in
function `get_singular_values(_cairo_matrix const*, double*, double*)':
CairoOutputDev.cc:(.text+0xebd): undefined reference to `sqrt'
/usr/bin/ld: CairoOutputDev.cc:(.text+0xeed): undefined reference to `sqrt'
Am 05.12.18 um 17:53 schrieb Jeroen Ooms:
> On Wed, Dec 5, 2018 at 5:12 PM Ranjan Ghosh <ghosh at pw6.de> wrote:
>> Hmm. I think it doesnt work that easily. Actually, I'm trying to build a
>> static pdf2svg which users poppler in turn. I tried to follow your
>> advice and installed libcairo-dev, libopenjp2-7-dev, libjpeg-dev, etc.
>> and then simply compiled poppler with -DBUILD_SHARED_LIBS=OFF. When I
>> subsequently tried to compile pdf2svg as static with the static poppler
>> I get:
>>
>> /usr/bin/ld: /usr/local/lib/libpoppler-glib.a(CairoFontEngine.cc.o):
>> undefined reference to symbol 'FT_Library_Version'
>> /usr/bin/ld: //usr/lib/x86_64-linux-gnu/libfreetype.so.6: error adding
>> symbols: DSO missing from command line
>>
>> I think the reason is that I actually must compile every single
>> contributing library that is used by poppler as fully static beforehand
>> instead of just installing them with apt, right?
> Your linking error occurs because you're missing -lfreetype. When
> static linking you need to include the linker flags for all the
> dependencies. Unfortunately poppler does not correctly record it's
> private dependencies in the pkg-config file, but try linking with
> these flags:
>
> pkg-config --libs --static poppler-cpp cairo lcms2 libopenjp2 libtiff-4
More information about the poppler
mailing list