Проблемы со связыванием функций, несмотря на то, что сообщается в dumpbin.exe - PullRequest
0 голосов
/ 19 апреля 2011

У меня серьезные проблемы с подключением библиотеки, несмотря на то, что я выполняю ту же процедуру, что и со всеми остальными библиотеками. Библиотека libmupdf.lib (библиотека для просмотра PDF).

В любом случае, я скомпилировал .lib и добавил его как «Дополнительные зависимости» в компоновщик, добавил заголовок, включающий в качестве дополнительных включений, и указал, где VSC ++ должен искать библиотеки. Он не жалуется на то, что не нашел libmupdf.lib, когда начинается ссылка.

Затем я получаю стандартную ошибку компоновщика:

error LNK2019: unresolved external symbol "int __cdecl fz_strlcat(char *,char const *,int)" (?fz_strlcat@@YAHPADPBDH@Z) referenced in function "void __cdecl winerror(struct pdfapp_s *,int)" (?winerror@@YAXPAUpdfapp_s@@H@Z)

Однако, если я сделаю следующее, я увижу, что fz_strlcat действительно находится в libmupdf.lib, но с добавлением _ .... это нормально?

C:\Program Files\Microsoft Visual Studio 10.0\VC>dumpbin /SYMBOLS "libmupdf.lib" | "grep.exe" fz_strlcat
033 00000000 SECTC  notype ()    External     | _fz_strlcat
060 00000000 UNDEF  notype ()    External     | _fz_strlcat
381 00000000 UNDEF  notype ()    External     | _fz_strlcat

Примечание: я попытался изменить вызов fz_strlcat на _fz_strlcat и произвел изменение в заголовке, но по-прежнему не связывался.

На данный момент приветствуются любые подсказки или помощь. Спасибо!

1 Ответ

8 голосов
/ 19 апреля 2011

Кажется, вам не хватает библиотеки Фитца. Это часть проекта MuPDF, но он создается как отдельный файл LIB.

Редактировать
Я исправлен: при просмотре файлов vcproj в GIT-репозитории MuPDF выясняется, что libmupdf.lib создается как одна большая библиотека, со всеми компонентами Fitz, а также даже с библиотеками сторонних производителей.

Теперь ... более подробно рассмотрев сообщение об ошибке, похоже на проблему с C + C ++ . Я не прав, когда вижу, что функция fz_strlcat вызывается из C ++, в связи с чем файл fitz.h, возможно, не был включен в связь extern "C" {}?
В таком случае происходит то, что C ++ создает искаженное имя для связи (fz_strlcat@@YAHPADPBDH@Z), которое включает коды для полной подписи функции (типы параметров и т. Д.).
Добавляя

extern "C" {
   #include "fitz.h"   //  or whatever other include file which in turn includes fitz.h
}

вокруг включений, которые относятся к функциям и переменным в библиотеке libmupdf, ошибка LNK должна исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...