CrazySage
@CrazySage
C++ developer

Использование Win32 версии Poppler-qt4?

Скачал с windows.kde.org poppler и возникло две проблемы.

1. Как сделать статическую либу poppler-qt4? В devel варианте идет lib являющаяся оболочкой для dll (а таскать за собой dll-ки не хочется), при самостоятельной сборке в конфигурации статической библиотеки и с ключом /MT либа все равно требует дллку при запуске.

2. Когда я пытаюсь собрать пример

#include &lt;poppler-qt4.h&gt;<br/>
<br/>
QString filename;<br/>
Poppler::Document* document = Poppler::Document::load(filename);<br/>
if (!document || document-&gt;isLocked()) {<br/>
 delete document;<br/>
 return;<br/>
}<br/>
if (document == 0) {<br/>
 return;<br/>
}<br/>
Poppler::Page* pdfPage = document-&gt;page(pageNumber); // Document starts at page 0<br/>
if (pdfPage == 0) {<br/>
 return;<br/>
}<br/>
QImage image = pdfPage-&gt;renderToImage();<br/>
if (image.isNull()) {<br/>
 return;<br/>
}<br/>
<br/>
// ... use image ...<br/>
<br/>
// after the usage, the page must be deleted<br/>
delete pdfPage;<br/>
delete document;



программа молча дохнет на renderToImage(), delete pdfPage, delete document

при этом page->text() и page->thumbnail() работают нормально

Кто-нибудь с подобным встречался?

Может ли это быть из-за того что у меня статически прилинкована одна версия Qt, а Poppler из-за того, что собран динамически и требует Qt-шные dll-ки использует другую?


Окружение:

Windows 7, MS Visual Studio Professional 2008, Qt 4.7
  • Вопрос задан
  • 3435 просмотров
Пригласить эксперта
Ответы на вопрос 3
mark_ablov
@mark_ablov
1. /MT отвечает за то, что мы цепляем статически стандартные либы MS'a, и на Qt это никак не влияет. Для того чтоб изменить типа линковки нужно поменять тип проекта, и поставить Static Library.
Ответ написан
Комментировать
CrazySage
@CrazySage Автор вопроса
C++ developer
Я сделал и то и другое
Ответ написан
Комментировать
@MikhailEdoshin
То есть вы собираете poppler как статическую библиотеку, затем линкуете ваш проект, статическую Qt и получившийся статический poppler, и при запуске он у вас вылетает, требуя какую-то DLL?

Если так, то посмотрите через dumpbin /imports (справка), какие DLL импортирует ваш собранный проект. Если там есть какая-то DLL, посмотрите лог сборки — там, соответственно, тоже должна быть статическая обертка для этой DLL. Или, если там ничего нет, может быть в исходниках poppler'а — MS позволяет указать библиотеку на уровне исходника с помощью pragma comment (справка). В любом случае эта статическая обертка должна быть где-то в окрестностях, иначе бы проект не собрался. Вам нужно ее отключить в настройках проекта — явно, или, если она прописана в исходниках, то через /NODEFAULTLIB:<name>.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы