lib.exe,Visual Studio,从dll和def文件生成.lib文件

时间:2011-03-17 19:04:21

标签: visual-studio-2010 dll

我是Windows和视觉工作室的新手。我必须编译用c ++编写的代码。它使用不同的库。我找到了这些库的dll文件。我可以没有任何问题编译源代码,但存在链接问题。我不知道如何链接DLL文件。我明白我需要.lib文件。但是所需的一些库没有提供任何lib文件。只有dll文件和dif文件。如何使用Visual Studio 2010 ultimate生成所需的lib文件?我找不到一个名为lib.exe的程序。谢谢。

4 个答案:

答案 0 :(得分:15)

您确实需要lib.exe将.def文件转换为链接器所需的.lib文件。它默认存储在visual studio目录的vc \ bin目录中,即C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \ lib.exe。最简单的方法是使用“Visual Studio命令提示符”,您可以在“开始”菜单,Microsoft Visual Studio 2010,Visual Studio工具中找到它。

接下来,使用/def:foo.def选项运行lib.exe以生成.lib。如果提供,请按照供应商的说明进行操作。并且不要犹豫与他们联系以获得支持。

答案 1 :(得分:2)

这确实需要大量工作,并且通常更容易谷歌搜索您需要的DLL的源和/或库,因为使用相同的编译器编译库和程序是个好主意(使部署更容易) ,所以你不依赖于多个vc运行时。)

您可以使用本指南创建.lib文件:http://support.microsoft.com/kb/131313

这是一个需要时间和大量调试的过程(取决于dll的大小以及dll接口的复杂性)

根据您的平台,位置通常为:

  • Windows 7 32位,32位VS2010:

    C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \

  • Windows 7 64位,64位VS2010:

    C:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin`

  • Windows 7 64位,32位VS2010:

    C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \

但是,如果启动Visual Studio命令提示符,它应该在您的路径中。 (查看开始菜单上的Visual Studio工具)

答案 2 :(得分:2)

如果您转到DLL的项目属性并检查链接器 - >;高级,有一个“导入库”条目。您可能必须将其设置为在构建DLL时生成lib文件,或者如果已经设置它,则应将其指向lib文件的位置。

如果你使用Visual Studio 2010构建整个项目,那么在项目的Common Properties'Reference部分中添加依赖库应该会自动触发必要的链接语句。

答案 3 :(得分:0)

如果您真的需要查找lib.exe,我有一个Python脚本,可以在任何用分号分隔的文件夹组中找到所需的内容。

class UserView(ModelView):
    form_extra_fields = {
        'password': CustomPasswordField('Password', validators=[InputRequired()])
    }

在您的情况下,请按以下方式使用它(在VS Developer命令提示符中):

import sys
import os
def select(a, b):
    d = []
    for c in a:
        d.append(b(c))
    return d
def multicheck(filename, folders_SEMICOLONSEPARATED):
    folders = folders_SEMICOLONSEPARATED.split(";")
    print("RESULTS:")
    k = True
    for f in folders:
        try:
            if filename.lower() in select(os.listdir(f), lambda k: k.lower()):
                k = False
                print("  " + os.path.join(f, filename))
        except:
            pass
    if k:
        print("  NONE")
if __name__ == "__main__":
    multicheck(sys.argv[1], sys.argv[2])

如果您不想找到它,只需使用它即可(在VS Developer Command Prompt中):

WHATEVER_YOU_CALL_IT.py lib.exe "%PATH%"