C ++中静态库的问题

时间:2008-10-09 14:56:27

标签: visual-studio static linker

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

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

有什么问题?

谢谢。

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

编辑: 预处理器魔术就像这样

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

答案 2 :(得分:1)

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

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

在许多项目中,如果无法更正库的设置(例如,第三方库),则无法执行任何操作。在这些情况下,您必须使用/ NODEFAULTLIB开关,它是“输入”部分中名为“忽略特定库”的链接器选项。

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

答案 3 :(得分:0)

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