c++ - 在当前项目中使用静态库
问题描述
当我将外部库和代码与当前项目链接时,我遇到了错误。通过这个例子你会理解这个问题。
//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 并在同一个解决方案中使用两个项目。我已经尝试了几种方法来纠正这个问题,但没有成功。我看到的当前方式是在头文件中实现所有功能。
解决方案
您应该能够将您的externalProgram
项目标记为依赖于该foo
项目。这将foo.o
与外部程序链接。
使用 UI,您将在
Project > Project Dependencies 中选择它:取决于 ...
如果这是正确的,那么问题就更微妙了,有时只是一个简单的错字。此时您要使用命令行工具拆分库并确认目标文件,并拆分目标文件并确认其中的符号。一个十年前的 SO 帖子讨论了使用lib.exe
示例库文件。dumpbin 工具有一个 /symbols 选项,对于查看生成的实际代码可能也很方便。
推荐阅读
- ios - iOS 应用的状态栏完全透明而不是半透明(使用 WKWebView)
- python - python gui tkinter中的绑定函数有问题
- java - Maven - 在构建之前更新 artifactId
- javascript - 这个“Windows 和 Safari 功能”有问题
- networking - 如何使用 tshark 作为 ascii 而不是 hex 打印数据列?
- ruby-on-rails - Postgres 列太大而无法清除
- scala - Scala:从类体创建实例的宏
- javascript - 即使似乎不存在,也会出现“语法错误”
- android - ROOM 数据库中的 Levenshtein 距离
- flutter - 我怎样才能避免在 Dart 中这种不必要的演员阵容?