gpt4 book ai didi

c++ - 在 Linux 上链接 pdfium

转载 作者:太空狗 更新时间:2023-10-29 12:14:25 26 4
gpt4 key购买 nike

我正在尝试在 linux(debian 64 位)中使用 pdfium 库。我设法(最终)编译了 pdfium 的 _x64 版本,测试程序似乎可以正常工作。但是,我似乎无法在单独的项目中使用这些库。这是我的文件:

#include <iostream>
#include "fpdfview.h"
#include "fpdftext.h"
#include "fpdfdoc.h"
#include "fpdfedit.h"
main(){
FPDF_InitLibrary();
std::cout << "Hello World!"<<std::endl;
return 0;
}

这是我的 Makefile:

CC = g++
CFLAGS = -Wall -g -Wno-unused-variable -Wno-reorder -I/usr/include/pdfium/core/include -I/usr/include/pdfium/fpdfsdk/include -I/usr/include/pdfium/third_party -I/usr/include/pdfium/v8/include
LIBS_pdfium = -static -L/usr/lib/pdfium
LDFLAGS = $(LIBS_pdfium)

Main : Main.o
${CC} ${CFLAGS} Main.o ${LDFLAGS} -o Main

Main.o : Main.cpp
${CC} ${CFLAGS} -c -std=c++11 Main.cpp

clean:
rm *o Main

当我运行 makefile 时,结果是:

g++ -Wall  -g -Wno-unused-variable -Wno-reorder -I/usr/include/pdfium/core/include  -I/usr/include/pdfium/fpdfsdk/include  -I/usr/include/pdfium/third_party  -I/usr/include/pdfium/v8/include     Main.o -static -L/usr/lib/pdfium  -o Main
Main.cpp:11: error: undefined reference to 'FPDF_InitLibrary'
collect2: error: ld returned 1 exit status

我也尝试过使用/home/username/pdfium/out/Release_x64/obj 中的库,但遇到了同样的错误

我知道错误:undefined reference to FPDF_InitLibrary 意味着存在链接错误。因此,我使用 objdump 检查了/home/username/pdfium/out/Release_x64/obj 中的库,其中之一包含 InitLibrary 符号。这似乎没有意义......

我不知道我指的是 include 或库中的错误路径还是其他错误。

我试图理解 chromiums pdf 插件项目 makefile,因为我认为这可能有助于我理解我应该使用的内容,但不幸的是它没有帮助。

对我做错了什么有什么想法吗?

最佳答案

要使用 PDFium 进行编译,链接行将取决于您是否已将 V8 和/或 XFA 编译到您的 PDFium 二进制文件中。

如果这些都没有启用,您将需要类似于:

PDF_LIBS="-lpdfium -lfpdfapi -lfxge -lfpdfdoc -lfxcrt -lfx_agg \
-lfxcodec -lfx_lpng -lfx_libopenjpeg -lfx_lcms2 -lfx_freetype -ljpeg \
-lfx_zlib -lfdrm -lpdfwindow -lbigint -lformfiller -ljavascript \
-lfxedit"
PDF_DIR=<path/to/pdfium>

clang -I $PDF_DIR/public -o foo foo.c -L $PDF_DIR/out/Debug -lstdc++ -framework AppKit $PDF_LIBS

public/是您在使用 PDFium 处理标题时应该使用的唯一目录。 OSX 需要 -framework AppKit。 PDFium header 采用纯 C 语言,但您需要 -lstdc++,因为 PDFium 在内部使用 C++,并且需要能够在新建/删除中进行链接。

如果您使用的是 V8,则需要添加:

-lv8_libbase -lv8_libplatform -lv8_snapshot -licui18n -licuuc -licudata

如果您使用 XFA,则需要 V8 包括 plus:

-lfpdfxfa -lxfa  -lfx_tiff

编辑最近有一个 pdf_is_complete_lib 选项添加到 PDFium 构建中。在您的 gn args 中将其设置为 true 将创建一个可以再次链接的 libpdfium。请注意,这仅在禁用 V8 和 XFA 的情况下进行了测试。

关于c++ - 在 Linux 上链接 pdfium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com