ссылки на PDF на Linux

Я пытаюсь использовать библиотеки pdfium в linux (debian 64-bit). Мне удалось (наконец-то) скомпилировать выпуск _x64 версии pdfium, и тестовые программы, похоже, работают. Однако я не могу использовать библиотеки в отдельном проекте.
Это мой файл:

#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

Когда я запускаю make-файл, результат:

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 означает, что произошла ошибка компоновки. Поэтому я проверил библиотеки в / home / username / pdfium / out / Release_x64 / obj, используя objdump, и одна из них содержала символ InitLibrary. Это не имеет смысла …

Я не знаю, имею ли я в виду неправильные пути в include или библиотеках, или это что-то не так.

Я пытался понять make-файл проекта плагина chromiums pdf, так как думал, что это может помочь мне понять, что я должен использовать, но, к сожалению, это не помогло.

Есть идеи, что я делаю не так?

1

Решение

Для компиляции с 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 для заголовков. -framework AppKit нужен на OSX. Заголовки PDFium находятся в простом C, но вам нужно -lstdc++ поскольку PDFium использует C ++ для внутреннего использования, он должен быть в состоянии связать в новом / удалить.

Если вы работаете с V8, вам нужно добавить:

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

и если вы используете XFA, вам понадобится V8 включает в себя плюс:

-lfpdfxfa -lxfa  -lfx_tiff

РЕДАКТИРОВАТЬ
Был недавно pdf_is_complete_lib опция добавлена ​​в сборку PDFium. Установка этого в true в вашем gn args создаст один libpdfium, который можно связать снова. Обратите внимание, что это было проверено только с отключенными V8 и XFA.

0

Другие решения

Args file ..

# Build arguments go here.
# See "gn args <out_dir> --list" for available build arguments.
is_debug = false
pdf_is_standalone = true
pdf_use_skia = false
pdf_use_skia_paths = false
pdf_enable_xfa = false
pdf_enable_v8 = false
is_component_build = false
clang_use_chrome_plugins = false
pdf_is_complete_lib = true
use_custom_libcxx = false

затем gn gen your/dir/catalog,

затем ninja -C your/dir/catalog pdfium_all и вы берете pdfium.a

В линкере

...
g++ -L-I/usr/include/glib-2.0 -o bin/debug/pdfium_test obj/debug/main.o
...

Вы должны иметь
-pg -s -Wl,--start-group /home/a/repo/pdfium/out/release/obj/libpdfium.a -Wl,--end-group -lpthread -ldl -lpthread

Ссылка в порядке.

0

По вопросам рекламы [email protected]