1

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

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

怎么了?

谢谢你。

4

4 回答 4

2

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

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

于 2008-10-09T15:03:15.553 回答
2

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

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

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

#pragma comment(lib, "MyStatic.lib")
于 2008-10-09T15:05:08.293 回答
1

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

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

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

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

于 2008-10-09T18:35:11.257 回答
0

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

于 2008-10-09T15:01:51.703 回答