Как создавать статические и динамические библиотеки.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-файлы для каждого поддерживаемого режима сборки