Как создавать статические и динамические библиотеки.obj-файлы для Visual C++?
У меня есть Visual Studio 2008, Windows7 64 бит.
Я использую WinBGIm Графическая Библиотека.
эта библиотека поставляется с некоторыми .obj-файлы. Нет .Либ ор .DLL-файл.
Я хочу, чтобы преобразовать их в статические .lib и dynamic .DLL-файл.
Я скопировал все .obj-файлы в директории:
C:Program Files (x86)Microsoft Visual Studio 9.0VCbinamd64
но следующая команда не работает:
C:Program Files (x86)Microsoft Visual Studio 9.0VCbinamd64>lib.exe /out:bgiout.lib *.obj
Microsoft (R) Library Manager Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1104: cannot open file 'bgiout.lib'
C:Program Files (x86)Microsoft Visual Studio 9.0VCbinamd64>
Как это сделать?
2 ответов
Да, вы можете сделать это, почти так же, как у вас есть.
C:\Code\bgi\obj>lib /out:libbgi.lib *.obj
LIB (lib.exe) используется для создания статических библиотек. Ссылка (ссылка.exe / DLL) используется для создания динамических библиотек (он создает .dll и библиотека импорта .библиотека.)
C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj [additional libs]
при использовании link /DLL
command, потребуются дополнительные библиотеки Win32 и C++ standard runtime (например, MSVCRT.lib и библиотека user32.Либ и т. д. и библиотеки MFC).
In этот случай; это, кажется, правильные аргументы компоновщика;
C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj MSVCRTD.lib User32.lib Gdi32.lib ole32.lib Comdlg32.lib OleAut32.lib
Примечание: построенные объектные файлы являются отладочными версиями, следовательно MSVCRTD.Либ (Примечание D) - это использовать здесь. С помощью приведенных выше команд я смог успешно связать оба a .dll и статический .движение за освобождение.
дополнительные пути включения и библиотеки;
при распределении этих выходов для других сборок дополнительные пути заголовка и библиотеки могут потребоваться для включения в целевой объект строить. Чтобы добавить дополнительные местоположения в пути поиска include и library, переменные среды (INCLUDE
и LIB
) может быть добавлен (для каждого пользователя или для всей системы), но они также могут быть указаны в командной строке через /I
и /LIBPATH
следующим образом:
cl /IC:\Code\include [additional options] main.cpp
link /LIBPATH:C:\Code\lib [additional options] xyz.lib
руководство;
- Запустите командную строку "Visual Studio", учитывая 2008, в меню "Пуск" должна быть ссылка " команда Visual Studio 2008 Проворный." Этот пакетный файл настроит правильную среду для сборки C++. Убедитесь, что подобрать правильный toolchain для целей x86 или x64.
- перейдите в каталог, содержащий объектные файлы.
- выполнить команду(ы) (как выше).
ваша ошибка LNK1104
Я подозреваю, что у вас есть ошибка,LNK1104, скорее всего, потому, что у вашего пользователя нет достаточного разрешения запись файлов в каталог" Program Files". В противном случае это может быть ошибка с использованием неправильной цепочки инструментов для вашей цели (x86 против x64).
обычно лучше сделать это в своем собственном каталоге, например:" C:\Code\bgi".
современные компиляторы C++ будут вставлять информацию о библиотеках, которые им нужны. Для visual studio, a .файл obj содержит ссылку на библиотеки C++, на которые он опирается (/MT /MD /MTd /MDd). эти библиотеки имеют несколько разные реализации и несовместимы с ними. Единственный выбор - иметь исходный код или несколько .obj-файлы для каждого поддерживаемого режима сборки