2015-06-02 32 views
1

我想在linux(debian 64位)中使用pdfium庫。我管理(最終)編譯pdfium的版本_x64版本,並且測試程序似乎工作。但是,我似乎無法在單獨的項目中使用這些庫。 這是我的文件:在linux上連接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 

當我運行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中的庫,但得到了相同的錯誤

我知道呃ror:undefined reference to FPDF_InitLibrary表示存在鏈接錯誤。因此我使用objdump檢查了/ home/username/pdfium/out/Release_x64/obj中的庫,其中一個包含了InitLibrary符號。這似乎沒有道理......

我不知道我是否指的是包含或庫中的錯誤路徑,或者如果它是其他的東西是錯誤的。

我試着理解鉻pdf pdf插件項目makefile,因爲我認爲這可能會幫助我理解我應該使用的東西,但不幸的是它沒有幫助。

我做錯了什麼想法?

+0

檢查測試程序是否將fpdf包含在'extern「C」{}'塊中(或者測試程序ar'.c'不是'.cpp',則不需要此塊)。如果是這樣,你必須在fpdf包含中加入'extern「C」{}'。這是首先想到的事情。 –

+0

Thanks @RudolfsBundulis我看了一個測試,他們沒有extern「c」,它是一個cpp文件。在包含文件中有一個外部「C」。這是相關的嗎? – user3872358

+0

如果'extern「C」'包裝你正在使用的相同的包含文件是相關的(很準確 - 如果它用於聲明'FPDF_InitLibrary'的include包含它是相關的)。但是不要浪費時間進行測試 - 只需將'extern「C」{}'添加到您的應用程序中 - 最有可能的就是您需要解決這個問題。 –

回答

0

要用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 

公共/與PDFium工作頭時,你應該使用唯一的目錄。 OSX上需要-framework AppKit。 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版本。在gn args中設置爲true將創建一個可重新鏈接的單個libpdfium。請注意,這僅在禁用V8和XFA時進行了測試。