我有 Visual Studio 2008,Windows7 64 位。
我正在使用 WinBGIm图形库。
该库随一些 .obj 文件一起提供。没有 .lib 或 .dll 文件。
我想将它们转换为静态 .lib 和动态 .dll 文件。
我已经复制了目录中的所有 .obj 文件:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64
但是,以下命令不起作用:
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>
怎么做?
最佳答案
是的,您可以做到这一点,就像您拥有的那样。
C:\Code\bgi\obj>lib /out:libbgi.lib *.obj
LIB ( lib.exe ) 用于创建静态库。 LINK (link.exe /DLL) 用于创建动态库(它创建 .dll 和导入库 .lib)。
C:\Code\bgi\obj>link /DLL /out:bgi.dll *.obj [additional libs]
使用
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
注意:构建的目标文件是调试版本,因此这里使用的是 MSVCRTD.lib(注意 D)。使用上面的命令,我已经能够成功链接 .dll 和静态 .lib。
额外的包含和库路径;
在为其他构建分发这些输出时,可能需要将其他头文件和库路径包含在目标构建中。要向包含和库搜索路径添加其他位置,可以将环境变量(
INCLUDE
和 LIB
)添加到(每个用户或系统范围内),但也可以在命令行上指定这些位置,通过 /I
和 /LIBPATH
如下;cl /IC:\Code\include [additional options] main.cpp
link /LIBPATH:C:\Code\lib [additional options] xyz.lib
准则;
你的错误 LNK1104
我怀疑您遇到的错误 LNK1104 很可能是因为您的用户没有足够的权限在“Program Files”目录中写入文件。否则,为您的目标(x86 与 x64)使用不正确的工具链可能会导致错误。
通常最好在您自己的目录中执行此操作;例如:“C:\Code\bgi”。
关于c++ - 如何从 Visual C++ 的 .obj 文件构建静态和动态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763558/