问题描述
下载、编译、安装poppler-21.02.0
后,
我在包含头文件和链接库方面遇到困难。
操作系统: Ubuntu 18.04 桌面版
在 .bashrc
文件中:
export CPATH=/usr/local/include/
export CPLUS_INCLUDE=/usr/local/include
export PATH=$PATH:/usr/local/include/poppler
export PATH=$PATH:/usr/local/lib
如果我放入 docopening.cpp :
#include <iostream>
#include "/home/marco/poppler-21.02.0/cpp/poppler-document.h"
#include "/home/marco/poppler-21.02.0/cpp/poppler-page.h"
using namespace std;
int main()
{
return 0;
}
编译似乎没问题:
popplerCpp$ g++ -std=c++11 -L /usr/local/lib docopening.cpp -o docopening -lpoppler
-lpoppler-qt5 -lpoppler-glib
/popplerCpp$ ls -lah
total 24K
drwxr-xr-x 2 marco marco 4,0K mar 1 15:55 .
drwxr-xr-x 21 marco marco 4,0K mar 1 12:15 ..
-rwxr-xr-x 1 marco marco 8,6K mar 1 15:55 docopening
-rw-r--r-- 1 marco marco 601 mar 1 15:55 docopening.cpp
当我在 main() 函数中添加这一行时:
poppler::document *doc = poppler::document::load_from_file("")
我收到此错误:
g++ -std=c++11 -L /usr/local/lib docopening.cpp -o docopening -lpoppler -lpoppler-qt5
-lpoppler-glib
/tmp/ccTelEVC.o: In function `main':
docopening.cpp:(.text+0x6f): undefined reference to
`poppler::document::load_from_file(std::__cxx11::basic_string<char,std::char_traits<char>,std::allocator<char> > const&,std::__cxx11::basic_string<char,std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
安装了poppler库:
(base) marco@pc01:/usr/local/include/poppler$ ls -lah
total 20K
drwxr-xr-x 5 root root 4,0K mar 1 12:08 .
drwxr-xr-x 14 root root 4,0K mar 1 12:08 ..
drwxr-xr-x 2 root root 4,0K mar 1 12:08 cpp
drwxr-xr-x 2 root root 4,0K mar 1 12:08 glib
drwxr-xr-x 2 root root 4,0K mar 1 12:08 qt5
(base) marco@pc01:/usr/local/include/poppler/cpp$ ls -lah
total 68K
drwxr-xr-x 2 root root 4,0K mar 1 12:08 .
drwxr-xr-x 5 root root 4,0K mar 1 12:08 ..
-rw-r--r-- 1 root root 1,8K feb 1 22:23 poppler-destination.h
-rw-r--r-- 1 root root 4,3K feb 1 22:23 poppler-document.h
-rw-r--r-- 1 root root 1,5K feb 1 22:23 poppler-embedded-file.h
-rw-r--r-- 1 root root 2,1K feb 1 22:23 poppler-font.h
-rw-r--r-- 1 root root 2,1K feb 1 22:23 poppler-font-private.h
-rw-r--r-- 1 root root 3,4K feb 1 22:23 poppler-global.h
-rw-r--r-- 1 root root 1,9K feb 1 22:23 poppler-image.h
-rw-r--r-- 1 root root 5,9K feb 1 22:23 poppler-page.h
-rw-r--r-- 1 root root 2,1K feb 1 22:23 poppler-page-renderer.h
-rw-r--r-- 1 root root 1,8K feb 1 22:23 poppler-page-transition.h
-rw-r--r-- 1 root root 1,9K feb 1 22:23 poppler-rectangle.h
-rw-r--r-- 1 root root 1,6K feb 1 22:23 poppler-toc.h
-rw-r--r-- 1 root root 1,2K mar 1 11:00 poppler-version.h
(base) marco@pc01:/usr/local/lib$ ls -lah | grep poppler
lrwxrwxrwx 1 root root 19 mar 1 12:08 libpoppler-cpp.so -> libpoppler-cpp.so.0
lrwxrwxrwx 1 root root 23 mar 1 12:08 libpoppler-cpp.so.0 -> libpoppler-cpp.so.0.9.0
-rw-r--r-- 1 root root 3,0M mar 1 12:08 libpoppler-cpp.so.0.9.0
lrwxrwxrwx 1 root root 20 mar 1 12:08 libpoppler-glib.so -> libpoppler-glib.so.8
lrwxrwxrwx 1 root root 25 mar 1 12:08 libpoppler-glib.so.8 -> libpoppler-glib.so.8.19.0
-rw-r--r-- 1 root root 5,2M mar 1 12:06 libpoppler-glib.so.8.19.0
lrwxrwxrwx 1 root root 19 mar 1 12:08 libpoppler-qt5.so -> libpoppler-qt5.so.1
lrwxrwxrwx 1 root root 24 mar 1 12:08 libpoppler-qt5.so.1 -> libpoppler-qt5.so.1.27.0
-rw-r--r-- 1 root root 14M mar 1 12:06 libpoppler-qt5.so.1.27.0
lrwxrwxrwx 1 root root 17 mar 1 12:08 libpoppler.so -> libpoppler.so.107
lrwxrwxrwx 1 root root 21 mar 1 12:08 libpoppler.so.107 -> libpoppler.so.107.0.0
-rw-r--r-- 1 root root 31M mar 1 12:05 libpoppler.so.107.0.0
我尝试以这种方式包含两个头文件:
#include <iostream>
#include "poppler-document.h"
#include "poppler/poppler-page.h"
using namespace std;
int main()
{
return 0;
}
但我明白了:
such file or directory
3 | #include "poppler-document.h"
| ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
如果我从 ""
切换到 <>
也会出现同样的错误:
#include <poppler-document.h>
#include <poppler/poppler-page.h>
幸运的是,我之前保存了安装日志:
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /usr/local/lib/libpoppler.so.107.0.0
-- Installing: /usr/local/lib/libpoppler.so.107
-- Installing: /usr/local/lib/libpoppler.so
-- Installing: /usr/local/lib/pkgconfig/poppler.pc
-- Installing: /usr/local/lib/pkgconfig/poppler-qt5.pc
-- Installing: /usr/local/lib/pkgconfig/poppler-glib.pc
-- Installing: /usr/local/lib/pkgconfig/poppler-cpp.pc
-- Installing: /usr/local/bin/pdftoppm
-- Set runtime path of "/usr/local/bin/pdftoppm" to ""
-- Installing: /usr/local/share/man/man1/pdftoppm.1
-- Installing: /usr/local/bin/pdftocairo
-- Set runtime path of "/usr/local/bin/pdftocairo" to ""
-- Installing: /usr/local/share/man/man1/pdftocairo.1
-- Installing: /usr/local/bin/pdfdetach
-- Set runtime path of "/usr/local/bin/pdfdetach" to ""
-- Installing: /usr/local/share/man/man1/pdfdetach.1
-- Installing: /usr/local/bin/pdfattach
-- Set runtime path of "/usr/local/bin/pdfattach" to ""
-- Installing: /usr/local/share/man/man1/pdfattach.1
-- Installing: /usr/local/bin/pdffonts
-- Set runtime path of "/usr/local/bin/pdffonts" to ""
-- Installing: /usr/local/share/man/man1/pdffonts.1
-- Installing: /usr/local/bin/pdfimages
-- Set runtime path of "/usr/local/bin/pdfimages" to ""
-- Installing: /usr/local/share/man/man1/pdfimages.1
-- Installing: /usr/local/bin/pdfinfo
-- Set runtime path of "/usr/local/bin/pdfinfo" to ""
-- Installing: /usr/local/share/man/man1/pdfinfo.1
-- Installing: /usr/local/bin/pdfsig
-- Set runtime path of "/usr/local/bin/pdfsig" to ""
-- Installing: /usr/local/share/man/man1/pdfsig.1
-- Installing: /usr/local/bin/pdftops
-- Set runtime path of "/usr/local/bin/pdftops" to ""
-- Installing: /usr/local/share/man/man1/pdftops.1
-- Installing: /usr/local/bin/pdftotext
-- Set runtime path of "/usr/local/bin/pdftotext" to ""
-- Installing: /usr/local/share/man/man1/pdftotext.1
-- Installing: /usr/local/bin/pdftohtml
-- Set runtime path of "/usr/local/bin/pdftohtml" to ""
-- Installing: /usr/local/share/man/man1/pdftohtml.1
-- Installing: /usr/local/bin/pdfseparate
-- Set runtime path of "/usr/local/bin/pdfseparate" to ""
-- Installing: /usr/local/share/man/man1/pdfseparate.1
-- Installing: /usr/local/bin/pdfunite
-- Set runtime path of "/usr/local/bin/pdfunite" to ""
-- Installing: /usr/local/share/man/man1/pdfunite.1
-- Installing: /usr/local/lib/libpoppler-glib.so.8.19.0
-- Installing: /usr/local/lib/libpoppler-glib.so.8
-- Set runtime path of "/usr/local/lib/libpoppler-glib.so.8.19.0" to
""
-- Installing: /usr/local/lib/libpoppler-glib.so
-- Installing: /usr/local/include/poppler/glib/poppler-action.h
-- Installing: /usr/local/include/poppler/glib/poppler-date.h
-- Installing: /usr/local/include/poppler/glib/poppler-document.h
-- Installing: /usr/local/include/poppler/glib/poppler-page.h
-- Installing: /usr/local/include/poppler/glib/poppler-attachment.h
-- Installing: /usr/local/include/poppler/glib/poppler-form-field.h
-- Installing: /usr/local/include/poppler/glib/poppler-annot.h
-- Installing: /usr/local/include/poppler/glib/poppler-layer.h
-- Installing: /usr/local/include/poppler/glib/poppler-macros.h
-- Installing: /usr/local/include/poppler/glib/poppler-movie.h
-- Installing: /usr/local/include/poppler/glib/poppler-media.h
-- Installing: /usr/local/include/poppler/glib/poppler.h
-- Installing: /usr/local/include/poppler/glib/poppler-structure-
element.h
-- Installing: /usr/local/include/poppler/glib/poppler-enums.h
-- Installing: /usr/local/include/poppler/glib/poppler-features.h
-- Installing: /usr/local/lib/libpoppler-qt5.so.1.27.0
-- Installing: /usr/local/lib/libpoppler-qt5.so.1
-- Set runtime path of "/usr/local/lib/libpoppler-qt5.so.1.27.0" to ""
-- Installing: /usr/local/lib/libpoppler-qt5.so
-- Installing: /usr/local/include/poppler/qt5/poppler-qt5.h
-- Installing: /usr/local/include/poppler/qt5/poppler-link.h
-- Installing: /usr/local/include/poppler/qt5/poppler-annotation.h
-- Installing: /usr/local/include/poppler/qt5/poppler-form.h
-- Installing: /usr/local/include/poppler/qt5/poppler-optcontent.h
-- Installing: /usr/local/include/poppler/qt5/poppler-export.h
-- Installing: /usr/local/include/poppler/qt5/poppler-page-
transition.h
-- Installing: /usr/local/include/poppler/qt5/poppler-media.h
-- Installing: /usr/local/include/poppler/qt5/poppler-version.h
-- Installing: /usr/local/lib/libpoppler-cpp.so.0.9.0
-- Installing: /usr/local/lib/libpoppler-cpp.so.0
-- Set runtime path of "/usr/local/lib/libpoppler-cpp.so.0.9.0" to ""
-- Installing: /usr/local/lib/libpoppler-cpp.so
-- Installing: /usr/local/include/poppler/cpp/poppler-destination.h
-- Installing: /usr/local/include/poppler/cpp/poppler-document.h
-- Installing: /usr/local/include/poppler/cpp/poppler-embedded-file.h
-- Installing: /usr/local/include/poppler/cpp/poppler-font.h
-- Installing: /usr/local/include/poppler/cpp/poppler-font-private.h
-- Installing: /usr/local/include/poppler/cpp/poppler-global.h
-- Installing: /usr/local/include/poppler/cpp/poppler-image.h
-- Installing: /usr/local/include/poppler/cpp/poppler-page.h
-- Installing: /usr/local/include/poppler/cpp/poppler-page-renderer.h
-- Installing: /usr/local/include/poppler/cpp/poppler-page-
transition.h
-- Installing: /usr/local/include/poppler/cpp/poppler-rectangle.h
-- Installing: /usr/local/include/poppler/cpp/poppler-toc.h
-- Installing: /usr/local/include/poppler/cpp/poppler-version.h
与
#include <iostream>
#include <poppler-document.h>
#include <poppler/poppler-page.h>
using namespace std;
int main()
{
return 0;
}
如果我使用 -I /usr/local/include/poppler/cpp
我会得到同样的错误:
g++ -std=c++11 -I /usr/local/include/poppler/cpp -L /usr/local/lib
docopening.cpp -o docopening -lpoppler -lpoppler-qt5 -lpoppler-glib
docopening.cpp:7:10: Fatal error: poppler/poppler-page.h: No such file
or directory
7 | #include <poppler/poppler-page.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~
感谢@JHBonarius,我解决了一个问题:头文件的include
:
#include <iostream>
#include <poppler-document.h>
#include <poppler-page.h>
using namespace std;
int main()
{
return 0;
}
g++ -std=c++11 -I /usr/local/include/poppler/cpp -L /usr/local/lib
docopening.cpp -o docopening -lpoppler -lpoppler-qt5 -lpoppler-glib
ls -la
total 24
drwxr-xr-x 2 marco marco 4096 mar 1 16:46 .
drwxr-xr-x 21 marco marco 4096 mar 1 12:15 ..
-rwxr-xr-x 1 marco marco 8784 mar 1 16:46 docopening
-rw-r--r-- 1 marco marco 662 mar 1 16:46 docopening.cpp
添加这一行:
`poppler::document *doc =
poppler::document::load_from_file("/.../");`
#include <iostream>
#include <poppler-document.h>
#include <poppler-page.h>
using namespace std;
int main()
{
poppler::document *doc =
poppler::document::load_from_file("//");
return 0;
}
g++ -std=c++11 -I /usr/local/include/poppler/cpp -L /usr/local/lib
docopening.cpp -o docopening -lpoppler -lpoppler-qt5 -lpoppler-glib
/tmp/ccgU0a4i.o: In function `main':
docopening.cpp:(.text+0x6f): undefined reference to
`poppler::document::load_from_file(std::__cxx11::basic_string<char,std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
如何解决include
和linking
?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)