首页 > 解决方案 > 在当前项目中使用静态库

问题描述

当我将外部库和代码与当前项目链接时,我遇到了错误。通过这个例子你会理解这个问题。

//foo.h
namespace LMS
{
    class foo
    {
        foo();         //implementation in cpp
        foo(int dummy) //implemented here
        {
            //something
        }
    };
} // namespace LMS
//foo.cpp
#include"foo.h"
namespace LMS
{
    foo::foo()
    {
        //something
    }
} // namespace LMS
//externalProgram.h
#include "foo.h"

LMS::foo *ptr;
ptr = new LMS::foo();  //Linking error: LNK 2019
ptr = new LMS::foo(2); //No error

现在的问题是外部程序不知道其中的foo.cpp和实现class foo methods。我目前正在使用 VS2019 并在同一个解决方案中使用两个项目。我已经尝试了几种方法来纠正这个问题,但没有成功。我看到的当前方式是在头文件中实现所有功能。

编辑:我已经链接了文件! 在此处输入图像描述 在此处输入图像描述

标签: c++visual-c++visual-studio-2019

解决方案


您应该能够将您的externalProgram项目标记为依赖于该foo项目。这将foo.o与外部程序链接。

使用 UI,您将在
Project > Project Dependencies 中选择它:取决于 ...

如果这是正确的,那么问题就更微妙了,有时只是一个简单的错字。此时您要使用命令行工具拆分库并确认目标文件,并拆分目标文件并确认其中的符号。一个十年前的 SO 帖子讨论了使用lib.exe示例库文件。dumpbin 工具有一个 /symbols 选项,对于查看生成的实际代码可能也很方便。


推荐阅读