我正在尝试在Linux(Debian 64位)中使用pdfium库。最终,我成功编译出了PDFium的release _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或libraries中引用了错误的路径,还是其他地方出了问题。
我尝试理解chromiums pdf插件项目的makefile,因为我认为这可能有助于我理解应该使用什么,但不幸的是它没有帮助我。
对于我做错了什么,有什么想法吗?
extern "C" {}
块中(或者测试程序是.c
而不是.cpp
,则不需要此块)。如果是这样,您必须在fpdf包含周围添加extern "C" {}
。这是我首先想到的事情。 - Rudolfs Bundulisextern "C"
包装的是你正在使用的相同包含文件,那么它就是相关的(准确地说 - 如果它用于声明FPDF_InitLibrary
的包含文件周围,则它是相关的)。但是为了不浪费时间进行测试 - 只需尝试将extern "C" {}
添加到您的应用程序中 - 很可能这就是您需要解决此问题的方法。 - Rudolfs BundulisLIBS_pdfium
不应该包含要链接的库的名称吗?您只是使用-L
指定了路径,但没有实际的库。 - Rudolfs Bundulis