2013-04-12 2 views
0

Я сгенерировал * .dll с VC++. Когда я хочу использовать его, требуется * .lib. Но я не могу его найти. Как получить * .lib? Благодарю.Где * .lib после генерации * .dll с VC++?

+1

Это старый, но может быть релевантным (также включает в себя дополнительные ссылки): http://stackoverflow.com/questions/584041/how-do-i-build-an-import-library-lib-and-a -dll-in-visual-c – NPE

+0

Я полагаю, что он обычно помещается в $ (OutDir) проекта (выходной каталог, который обычно является папкой 'debug' или' release' из папки проекта. Вы можете изменить это если это необходимо, это параметры Project/Linker, которые я использовал по умолчанию, поскольку я всегда указываю, где мои помещаются, поэтому вы должны это проверить. Edit: проверено значение по умолчанию от MS: «Имя по умолчанию формируется из базовое имя основного выходного файла и расширение .lib. " – WhozCraig

ответ

10

Если вы не указали иначе, то .lib будет сгенерирован в той же папке, что и .DLL.

Если вы получаете dll, но не lib, вероятность того, что так или иначе вы ничего не экспортируете из DLL. В таком случае компоновщик создаст dll, но автоматически не создаст соответствующую библиотеку импорта.

+0

+1 для обозначения создания сбрасывания без каких-либо экспортированных символов (которое также [в документации] (http://msdn.microsoft.com/en-us/ библиотека/67wc07b9.aspx) в случае, если кто-то заинтересован. См. второе «Замечание», раздел). – WhozCraig

2

Это действительно зависит от настроек вашего проекта.

Взгляните * .vcprojx

и поиск аналогичной схеме:

<link> 
<ImportLibrary>.\Release/yourlibrary.lib</ImportLibrary> 
</link> 
1

Обычно Visual Studio помещает .lib прямо рядом с .dll файл. Ваш случай звучит так, будто он вообще не генерирует .lib. При создании библиотек как dll, если вы хотите связать эту библиотеку с другим проектом (в отличие от использования dllopen и подобных), вам нужно указать, какие функции следует экспортировать в lib. Для этого вам необходимо добавить все классы или функции, которые вы хотите экспортировать, с помощью __declspec (dllexport) при создании библиотеки и __declspec (dllimport) при ее связывании.

То, что вы часто некоторые макрос так:

#ifdef WIN32 
    #ifdef MYLIB_EXPORTS 
     #define MYLIBAPI __declspec(dllexport) 
    #else 
     #define MYLIBAPI __declspec(dllimport) 
    #endif 
#else 
    #define MYLIBAPI 
#endif 

Затем при построении LIB, вы определяете препроцессор MYLIB_EXPORTS, так что она экспортирует, в то время как связываннии импортирует. Ваш собственный код может выглядеть следующим образом

class MYLIBAPI MyClass 
{ 
public: 
    void SomeFunction() 
} 
MYLIBAPI void SomeGlobalFunction(); 

Теперь MyClass и SomeGLobalFunction экспортируются при строительстве, и происходит в Lib файла.

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