2008-10-09 78 views
1

我想在Visual C++ 2005(非托管C++)中使用我创建的静态库。我声明了一个函数“int myF(int a);”到一个.h文件中,我将其实现在一个.cpp文件中,然后编译它 - 生成.lib文件。我在VC++ 2005(也是本地C++)中创建一个新项目(一个单独的解决方案),我添加包含文件和lib文件的路径;当我调用函数myF时,链接器报告错误:“在函数_main中引用的错误LNK2019:未解析的外部符号_myF”。如果我在与库项目相同的解决方案中创建客户端项目,然后添加对库项目的引用,它将起作用,但我不会像这样实现所有内容,而是将外部库添加到我的项目中。C++中的静态库的问题

有什么不对?

谢谢。

回答

0

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

2

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

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

2

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

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

编辑: 预处理魔高一尺这​​样

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

(编辑:这是它现在已经删除了越来越链路相/ NODEFAULTLIB错误的问题的回答...耸肩)

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

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

但是既然你控制着主库和库,建立你的LIB文件的调试和发布版本,或者确保你的“C/C++;代码生成;运行时库”设置在两个项目中都匹配。