【问题标题】:Problem with static library in C++C++中的静态库问题
【发布时间】:2008-10-09 14:56:26
【问题描述】:

我正在尝试使用我在 Visual C++ 2005(非托管 C++)中创建的静态库。我声明了一个函数“int myF(int a);”到 .h 文件中,我在 .cpp 文件中实现它,我编译它 - 生成 .lib 文件。

我在 VC++ 2005(也是原生 C++)中创建了一个新项目(一个单独的解决方案),我添加了包含文件和 lib 文件的路径;当我调用函数 myF 时,链接器报告错误:“错误 LNK2019:未解析的外部符号 _myF 在函数 _main 中引用”。如果我在与库项目相同的解决方案中创建客户端项目,然后添加对库项目的引用,它可以工作,但我不会像这样实现所有内容,而是将外部库添加到我的项目中。 .

怎么了?

谢谢。

【问题讨论】:

    标签: visual-studio static linker


    【解决方案1】:

    您还需要在第二个项目中包含实际的 .lib 文件(不仅仅是它的路径)。

    链接器设置中应该有一个选项来执行此操作。

    【讨论】:

      【解决方案2】:

      仅列出可以找到 MyStatic.lib 的文件夹是不够的。您必须明确告诉链接器 Dependant.vcproj 正在使用 MyStatic.lib。

      在 VS2005 中,您可以通过项目属性->链接器->输入->附加依赖项来执行此操作。您还可以在 .h 文件中添加一些预处理器的内容,以告诉编译器告诉链接器使用 MyStatic.lib。

      编辑: 预处理器的魔法是这样的

      #pragma comment(lib, "MyStatic.lib")
      

      【讨论】:

        【解决方案3】:

        (编辑:这是对在链接阶段获取 /NODEFAULTLIB 错误的问题的回应,该错误现已被删除......耸耸肩)

        如果您收到 defaultlib 错误,则说明您正在混合编译器设置。例如,如果您在调试中构建库并在发布中构建主库,您将收到此错误,因为它们是为使用不同版本的 CRTL 而构建的。如果您使用不同的设置与 C 运行时链接作为对象库或作为 DLL,也会发生这种情况。 (请参阅“运行时库”设置下的 C/C++ 选项、“代码生成”部分)

        在许多项目中,如果您无法更正库的设置(例如,第 3 方库),您将无能为力。在这些情况下,您必须使用 /NODEFAULTLIB 开关,它是“输入”部分中称为“忽略特定库”的链接器选项。

        但由于您同时控制主库和库,请构建 LIB 文件的调试版本和发布版本,或确保您的“C/C++;代码生成;运行时库”设置在两个项目中匹配。

        【讨论】:

          【解决方案4】:

          尝试在链接器输入中为项目属性设置其他依赖项。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多