如何从Visual C++的.obj文件构建静态和动态库?

use*_*312 12 c++ dll visual-studio-2008 .lib

我有Visual Studio 2008,Windows7 64位.

我正在使用WinBGIm图形库.

该库提供了一些.obj文件.没有.lib或.dll文件.

我想将它们转换为静态.lib和动态.dll文件.

我已将所有.obj文件复制到目录中:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64
Run Code Online (Sandbox Code Playgroud)

但是,以下命令不起作用:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64>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.0\VC\bin\amd64>
Run Code Online (Sandbox Code Playgroud)

怎么做?

Nia*_*all 24

是的,你可以做到这一点,就像你拥有它一样.

C:\Code\bgi\obj>lib /out:libbgi.lib *.obj
Run Code Online (Sandbox Code Playgroud)

LIB(lib.exe)用于创建静态库.LINK(link.exe/DLL)用于创建动态库(它创建.dll和导入库.lib).

C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj [additional libs]
Run Code Online (Sandbox Code Playgroud)

使用该link /DLL命令时,将需要其他Win32和C++标准运行时库(例如MSVCRT.lib和User32.lib等以及MFC库).

在这种情况下; 这似乎是正确的链接器参数;

C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj MSVCRTD.lib User32.lib Gdi32.lib ole32.lib Comdlg32.lib OleAut32.lib
Run Code Online (Sandbox Code Playgroud)

注意:构建的目标文件是调试版本,因此MSVCRTD.lib(注意D)是这里使用的.通过上面的命令,我已经能够成功链接.dll和静态.lib.

其他包括和图书馆路径;

在为其他构建分发这些输出时,可能需要在目标构建中包含其他头和库路径.要添加额外的位置到包括和库搜索路径,环境变量(INCLUDELIB)可以被添加到(或者每用户或系统宽),但这些也可以在命令行上被指定,经由/I/LIBPATH如下;

cl /IC:\Code\include [additional options] main.cpp
link /LIBPATH:C:\Code\lib [additional options] xyz.lib
Run Code Online (Sandbox Code Playgroud)

指引;

  • 启动"Visual Studio"命令提示符,在2008年,应该在开始菜单"Visual Studio 2008命令提示符"中有一个链接.此批处理文件将为C++构建设置正确的环境.确保匹配x86或x64目标的正确工具链.
  • 导航到包含目标文件的目录.
  • 运行您拥有的命令(如上所述).

您的错误LNK1104

我怀疑您的错误LNK1104很可能是因为您的用户没有足够的权限在"Program Files"目录中写入文件.否则,对目标使用不正确的工具链可能会出错(x86与x64).

通常最好在您自己的目录中执行此操作; 例如:"C:\ Code\bgi".