2010-02-15 4 views
3

Я использую Visual Studio 5.0 У меня есть DLL и статическая библиотека. Мое намерение - использовать статическую функцию, определенную в статической библиотеке. Я включил файл заголовка в предполагаемый источник cpp, а также дал путь в зависимостях проекта. Тем не менее это дает мне ошибки компоновщика.Связать статическую библиотеку с DLL

Ниже ошибка линкера

ошибка LNK2019: неразрешенный внешний символ "общественность: статический BOOL __cdecl GPH :: IsA (класс PtOnDemand &, wchar_t сопз *)" (IsA @ GPH @@ SA_NAAVPtOnDemand @? @ PB_W @ Z), на которые ссылается функция «private: int __thiscall PtXMLP :: HandleObjectBegin (char const *, char const * *)» (? HandleObjectBegin @ PtXMLP @@ AAEHPBDPAPBD @ Z) 1>. \ ReleaseU/epptxml.dll: фатальная ошибка LNK1120: 1 нерешенные внешние

Любые предложения

+2

вы, вероятно, следует показать нам/файл проекта Makefile и ошибки компоновщика. И +1 для всех ответов, чтобы обновить визуальное студийное издание ... Хороший лорд, 5.0 - древний. – Tim

ответ

3

Возможно, линкер не находит вашу функцию, потому что она скомпилирована с различными настройками. Подобно выпуску vs debug, unicode vs non-unicode, различия в соглашениях о вызовах. Это может привести к тому, что имя будет искажено по-разному. Если .h файл записывается в C, не C++, вам может понадобиться отключить имя коверкая вообще, обернув прототипы в

extern "C" 
    { 
    // function prototypes go here. 
    } 
+1

+1: на основании комментариев Sameer к другим ответам это почти наверняка. –

+0

+1, как указано выше, данная функция принимает wchar_t, указывающий на unicode. Также IsA звучит как функция типа IsKindOf, обычная в MFC (например, замена RTTI) –

+0

Я использую cpprestsdk в моем приложении win32. Он продолжает искать DLL библиотеки (cpprestsdk). Это решение не работает для меня вообще :( – Marss

0

Прежде всего, пришло время получить новую версию Visual Studio :-) Но, скорее всего, вы используете ее для устаревшей поддержки.

В любом случае, просто включить заголовочный файл недостаточно. Вам также нужно убедиться, что вы сообщите компоновщику, где находится файл статической библиотеки (должен быть файл .a) и имя библиотеки.

+0

@fuzz Я уже сделал это –

1

Ну, я не знаю точно о Visual Studio 5. Но вам нужно добавить библиотеку, которую вы хотите связать статически как дополнительную зависимость от вашего проекта.

+0

@simon Я уже сделал это –

2

Вы также должны включить файл lib в свой проект, чтобы он был связан. Обратите внимание на VS5, но на 6 это находится в разделе Project/Add to Project/Files. Кроме того, вы можете включить его в параметры компоновщика в свойствах проекта.

+0

@shane Я уже сделал это –

+0

@Sameer, похоже, что вы должны расследовать ответ jdv так. Взгляните на эффект добавления _MBCS и UNICODE в качестве определений препроцессора –

Смежные вопросы