【发布时间】:2020-01-16 00:19:11
【问题描述】:
我正在使用 C++ 中的 qtpdf 使用 Qt 开发应用程序。 我想为我的项目设置 gitlab CI,所以我试图在 docker 容器中编译和运行测试,以便为 CI 创建 docker 映像。 虽然我在我的机器上编译 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:latest,安装的包是build-essential、qt5-default、git、qtbase5-private-dev。我还尝试了 ubuntu:latest 和 ubuntu:disco 并得到了完全相同的错误。
我运行的唯一命令是:
- 克隆我的仓库
- 下载子模块
qmakemake
前面的命令导致我之前粘贴的错误日志。
为了构建 qtpdf,我错过了什么以及应该做些什么?
【问题讨论】:
-
显示你的 Dockerfile