如何从.obj文件为Visual c++构建静态和动态库

How to build static and dynamic libraries from .obj files for Visual C++?

本文关键字:静态 构建 动态 c++ Visual obj 文件      更新时间:2023-10-16

我有Visual Studio 2008, Windows7 64位。

我使用的是WinBGIm图形库

该库与一些.obj文件一起提供。没有。lib或。dll文件。

我想把它们转换成静态的。lib和动态的。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>

怎么做?

是的,你可以这样做,就像你有它一样。

C:Codebgiobj>lib /out:libbgi.lib *.obj

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

C:Codebgiobj>link /DLL /out:bgi.dll *.obj [additional libs]

当使用link /DLL命令时,将需要额外的Win32和c++标准运行时库(例如MSVCRT)。lib和User32。

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

C:Codebgiobj>link /DLL /out:bgi.dll *.obj MSVCRTD.lib User32.lib Gdi32.lib ole32.lib Comdlg32.lib OleAut32.lib

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

附加包含和库路径;

在为其他构建分发这些输出时,可能需要将附加的头文件和库路径包含到目标构建中。要向包含路径和库搜索路径添加其他位置,可以添加环境变量(INCLUDELIB)(每个用户或系统范围),但也可以在命令行上通过/I/LIBPATH指定这些位置,如下所示;

cl /IC:Codeinclude [additional options] main.cpp
link /LIBPATH:C:Codelib [additional options] xyz.lib

指南;

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

您的错误LNK1104

我怀疑你的错误,LNK1104,很可能是因为你的用户没有足够的权限在"Program files"目录下写文件。否则,可能是针对目标(x86 vs. x64)使用不正确的工具链造成的错误。

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

现代c++编译器会嵌入它们需要的库的信息。对于visual studio, .obj文件包含对它所依赖的c++库(/MT/MD/MTd/MDd)的引用,这些库的实现略有不同,并且与它们不兼容。唯一的选择是拥有源代码,或者为每个支持的构建模式提供多个.obj文件