链接和包含 popper cpp 的问题

问题描述

下载、编译、安装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

如何解决includelinking

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...