简体   繁体   中英

Can't build qtpdf in docker container

I'm developping an application with Qt using qtpdf in C++. I want to setup gitlab CI for my project, so I'm trying to compile and run tests in a docker container in order to create the docker image for the CI. While I have no problem compiling qtpdf on my machine, I can't do so in the docker container.

Here is my compilation log (from the error):

g++ -Wl,-z,relro -Wl,--as-needed -Wl,--no-undefined -Wl,--version-script,QtPdf.version -Wl,-O1 -Wl,--enable-new-dtags -shared -Wl,-Bsymbolic-functions -Wl,-soname,libQt5Pdf.so.5 -o libQt5Pdf.so.5.9.0 .obj/jsbridge.o .obj/qpdfbookmarkmodel.o .obj/qpdfdocument.o .obj/qpdfpagenavigation.o .obj/qpdfpagerenderer.o .obj/moc_qpdfnamespace.o .obj/moc_qpdfpagerenderer.o  -lQt5Gui -lQt5Core -lpthread -L/soundpdf/src/3rdparty/qtpdf/lib -lqtpdfium -lQt5Network -lQt5Core -lpthread -lGL 
/usr/bin/ld: .obj/qpdfbookmarkmodel.o: in function `QPdfBookmarkModel::setStructureMode(QPdfBookmarkModel::StructureMode)':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:177: undefined reference to `FPDFBookmark_GetFirstChild'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:190: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:193: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:195: undefined reference to `FPDFBookmark_GetDest'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:196: undefined reference to `FPDFDest_GetPageIndex'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:205: undefined reference to `FPDFBookmark_GetNextSibling'
/usr/bin/ld: .obj/qpdfbookmarkmodel.o: in function `QPdfBookmarkModel::setDocument(QPdfDocument*)':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:177: undefined reference to `FPDFBookmark_GetFirstChild'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:190: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:193: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:195: undefined reference to `FPDFBookmark_GetDest'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:196: undefined reference to `FPDFDest_GetPageIndex'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:205: undefined reference to `FPDFBookmark_GetNextSibling'
/usr/bin/ld: .obj/qpdfbookmarkmodel.o: in function `QPdfBookmarkModel::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:177: undefined reference to `FPDFBookmark_GetFirstChild'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:190: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:193: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:195: undefined reference to `FPDFBookmark_GetDest'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:196: undefined reference to `FPDFDest_GetPageIndex'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:205: undefined reference to `FPDFBookmark_GetNextSibling'
/usr/bin/ld: .obj/qpdfbookmarkmodel.o: in function `QPdfBookmarkModelPrivate::appendChildNode(BookmarkNode*, void*, int, void*)':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:177: undefined reference to `FPDFBookmark_GetFirstChild'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:190: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:193: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:195: undefined reference to `FPDFBookmark_GetDest'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:196: undefined reference to `FPDFDest_GetPageIndex'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:205: undefined reference to `FPDFBookmark_GetNextSibling'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfbookmarkmodel.cpp:190: undefined reference to `FPDFBookmark_GetTitle'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::updateLastError() [clone .part.25]':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:134: undefined reference to `FPDF_GetLastError'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::initiateAsyncLoadWithTotalSizeKnown(unsigned long long)':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:221: undefined reference to `FPDFAvail_Create'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::tryLoadDocument()':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:243: undefined reference to `FPDFAvail_IsDocAvail'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:248: undefined reference to `FPDFAvail_GetDocument'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:254: undefined reference to `FPDF_CloseDocument'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::checkComplete()':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:277: undefined reference to `FPDF_GetPageCount'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:281: undefined reference to `FPDFAvail_IsPageAvail'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocument::pageSize(int) const':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:554: undefined reference to `FPDF_GetPageSizeByIndex'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocument::render(int, QSize, QPdfDocumentRenderOptions)':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:575: undefined reference to `FPDF_LoadPage'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:581: undefined reference to `FPDFBitmap_CreateEx'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:616: undefined reference to `FPDF_RenderPageBitmap'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:618: undefined reference to `FPDFBitmap_Destroy'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:620: undefined reference to `FPDF_ClosePage'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocument::metaData(QPdfDocument::MetaDataField) const':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:476: undefined reference to `FPDF_GetMetaText'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:479: undefined reference to `FPDF_GetMetaText'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::QPdfDocumentPrivate()':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:72: undefined reference to `FPDF_InitLibrary'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::clear()':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:103: undefined reference to `FPDF_CloseDocument'
/usr/bin/ld: /soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:107: undefined reference to `FPDFAvail_Destroy'
/usr/bin/ld: .obj/qpdfdocument.o: in function `QPdfDocumentPrivate::~QPdfDocumentPrivate()':
/soundpdf/src/3rdparty/qtpdf/src/pdf/qpdfdocument.cpp:95: undefined reference to `FPDF_DestroyLibrary'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:101: ../../lib/libQt5Pdf.so.5.9.0] Error 1
make[2]: Leaving directory '/soundpdf/src/3rdparty/qtpdf/src/pdf'
make[1]: *** [Makefile:72: sub-pdf-make_first] Error 2
make[1]: Leaving directory '/soundpdf/src/3rdparty/qtpdf/src'
make: *** [Makefile:47: sub-src-make_first] Error 2

The base image I use is debian:latest and the installed packages are build-essential , qt5-default , git , qtbase5-private-dev . I also tried with ubuntu:latest and ubuntu:disco and got the exact same error. The only commands I run are:

  1. Cloning my repo
  2. Downloading the submodules
  3. qmake
  4. make

The previous commands lead to the error log I pasted before.

What did I miss and what should I do in order to build qtpdf ?

The following Dockerfile allows you to compile qtpdf.

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get autoclean

RUN apt-get update && apt-get install \
    -y --no-install-recommends \
    build-essential \
    git \
    ca-certificates \
    qt5-default \
    python2.7 \
    qtbase5-private-dev

RUN ln -sf /usr/bin/python2.7 /usr/bin/python

RUN git clone git://code.qt.io/qt-labs/qtpdf \
    && cd qtpdf \
    && git submodule update --init --recursive \
    && qmake \
    && make \
    && make install

RUN cd qtpdf/examples/pdf/pdfviewer \
    && make

RUN apt-get update && apt-get install \
    -y --no-install-recommends \
    wget

RUN wget https://file-examples.com/wp-content/uploads/2017/10/file-example_PDF_1MB.pdf

CMD qtpdf/examples/pdf/pdfviewer/pdfviewer file-example_PDF_1MB.pdf

Then run it with the following commands:

$ docker build --tag=qtpdf .
$ docker run -it \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    -e DISPLAY=$DISPLAY \
    --device /dev/dri \
    qtpdf:latest

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM