如何从.obj文件为Visual c++构建静态和动态库
How to build static and dynamic libraries from .obj files for Visual C++?
我有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。
附加包含和库路径;
在为其他构建分发这些输出时,可能需要将附加的头文件和库路径包含到目标构建中。要向包含路径和库搜索路径添加其他位置,可以添加环境变量(INCLUDE
和LIB
)(每个用户或系统范围),但也可以在命令行上通过/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文件
- 如何使用cmake设置OpenCV以启用动态和静态构建
- 如何静态构建并在Windows上包含WolfSSL
- g libcurl静态构建在NGHTTP2库上失败
- 完全静态构建具有所有依赖项(libgcc等)的应用程序
- 使用MinGW 6.3.0时,Qt 5.7.0的静态构建无法完成
- 使用内置MySQL库的Qt静态构建
- 在windows 7上静态构建Qt 5.1.1-nmake和cl错误
- 使用静态构建curl链接项目
- 在Windows上静态构建CPython——链接问题
- 没有 DLL 依赖项的静态构建可执行文件
- Qt 5.4 静态构建在 Visual Studio 2013 中产生"unresolved external symbol"链接错误
- 使用Qt制作静态构建(独立应用程序)
- 在我的CMake项目中使用静态构建而不是OpenCV的共享构建
- 静态构建Qt后,我无法在Windows 7上编译/链接应用程序(GNU分配器错误)
- Qt静态构建在虚拟机(win7 32位)上需要很长时间
- 静态构建Qt 5.1
- 如何在c++XE5 embacadero中为项目创建静态构建
- 使用Visual Studio将静态构建的库链接到共享库可能存在内存风险
- 如何使用Qt的静态构建为Windows创建静态链接版本
- QT 5.7 MSVC 2015静态构建不工作