Не могу собрать qtpdf в docker контейнере - PullRequest
0 голосов
/ 16 января 2020

Я разрабатываю приложение с Qt, используя qtpdf на C ++. Я хочу настроить Gitlab CI для своего проекта, поэтому я пытаюсь скомпилировать и запустить тесты в контейнере docker, чтобы создать образ docker для CI. Хотя у меня нет проблем с компиляцией qtpdf на моей машине, я не могу сделать это в контейнере docker.

Вот мой журнал компиляции (из ошибки):

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

Базовый образ, который я использую, - это debian: последние и установленные пакеты: build-essential, qt5-default, git, qtbase5-private-dev. Я также попытался с Ubuntu: latest и Ubuntu: Disco и получил ту же ошибку. Единственные команды, которые я запускаю:

  1. Клонирование моего репо
  2. Загрузка подмодулей
  3. qmake
  4. make

Предыдущие команды ведут к журналу ошибок, который я вставил ранее.

Что я пропустил и что я должен сделать, чтобы собрать qtpdf?

1 Ответ

0 голосов
/ 16 января 2020

Следующий Dockerfile позволяет вам скомпилировать 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

Затем запустите его с помощью следующих команд:

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