Visual Studio 抛出 LNK2019 并解决缺少 headers/source 个文件
Visual Studio throwing LNK2019 and solution missing headers/source files
-- 更新--
- 通过添加 -> 现有项将源文件
settings.cpp
直接添加到项目中解决了 LNK2019(我怀疑它找不到它)。
-- 更新问题--
- 如何指定一个源文件目录,而不必像上面更新中描述的那样手动添加其中的所有文件?这对于 header 文件来说显然是可以实现的(如下所述,通过将目录添加到设置中,这对于源文件来说不一样吗?
--原题--
我正在努力将一个项目从 CPython 复制到 C++,作为学习更多 C++ 的挑战,但我似乎无法建立环境以便我可以编译测试 运行。当我构建解决方案时,它会抛出一个 LNK2019,我知道这与链接器无法定位符号有关。我已经阅读了许多关于 SO 的解决方案,这些解决方案说用文件目录更新属性,但它们没有解决问题。
目前存在的问题:
- 其他目录中的一些 headers 在资源管理器中显示,但有些不显示,为什么?
- 没有找到源文件,因此抛出LNK2019,无法解析,如何?
这是我的项目布局:
/root
/proj-cmd
/src/main/cpp
/proj/cmd
-> main.cpp
/proj-core
/src/main/cpp/
/proj/cmd
-> command.h
-> base_command.h
-> base_command.cpp
/proj/utils
-> settings.h
-> settings.cpp
测试环境main.cpp
内容:
// astro
#include <astro/core/util/settings.h>
// stdlib
#include <exception>
#include <string>
#include <iostream>
using namespace std;
// astro entry point
int
main(int argc, char *argv[])
{
if (conf().hasKey("APP_CWD"))
{
cout << "APP_CWD is: " << conf().getKey("APP_CWD") << endl;
}
else
{
cout << "APP_CWD was not found" << endl;
}
}
为了 #include <astro/core/util/settings.h>
工作,我更新了属性中的包含目录:
然而,在资源管理器中只显示 command.h
和 settings.h
,而不显示 base_command.h
:
此外,base_command.cpp
和 settings.cpp
也不显示在源文件中,所以我更新了(类似于包含目录)源目录:
这解决了我注意到的第一个问题,但现在是 LNK2019。我相信这是前一个问题的相关结果,因为源文件未知:
所以在许多其他 SO 帖子之后,我尝试更新链接器设置但没有成功:
我对 Visual Studio 2017 环境不是很熟悉,所以如果有人可以提供有关如何配置这些设置的输入以便我可以编译,我将不胜感激。
您需要将所有 .cpp 文件作为现有项添加到您的项目中。 IDE 仅仅位于一个目录中不足以让 IDE 知道编译这些文件。 Headers 通过 #include 按目录找到,但您仍应将它们作为现有项添加到您的项目中,以便更容易在树视图中导航它们。
这就是您遇到链接器错误的原因:settings.cpp 和 base_command.cpp 中的代码永远不会构建。
-- 更新--
- 通过添加 -> 现有项将源文件
settings.cpp
直接添加到项目中解决了 LNK2019(我怀疑它找不到它)。
-- 更新问题--
- 如何指定一个源文件目录,而不必像上面更新中描述的那样手动添加其中的所有文件?这对于 header 文件来说显然是可以实现的(如下所述,通过将目录添加到设置中,这对于源文件来说不一样吗?
--原题--
我正在努力将一个项目从 CPython 复制到 C++,作为学习更多 C++ 的挑战,但我似乎无法建立环境以便我可以编译测试 运行。当我构建解决方案时,它会抛出一个 LNK2019,我知道这与链接器无法定位符号有关。我已经阅读了许多关于 SO 的解决方案,这些解决方案说用文件目录更新属性,但它们没有解决问题。
目前存在的问题:
- 其他目录中的一些 headers 在资源管理器中显示,但有些不显示,为什么?
- 没有找到源文件,因此抛出LNK2019,无法解析,如何?
这是我的项目布局:
/root
/proj-cmd
/src/main/cpp
/proj/cmd
-> main.cpp
/proj-core
/src/main/cpp/
/proj/cmd
-> command.h
-> base_command.h
-> base_command.cpp
/proj/utils
-> settings.h
-> settings.cpp
测试环境main.cpp
内容:
// astro
#include <astro/core/util/settings.h>
// stdlib
#include <exception>
#include <string>
#include <iostream>
using namespace std;
// astro entry point
int
main(int argc, char *argv[])
{
if (conf().hasKey("APP_CWD"))
{
cout << "APP_CWD is: " << conf().getKey("APP_CWD") << endl;
}
else
{
cout << "APP_CWD was not found" << endl;
}
}
为了 #include <astro/core/util/settings.h>
工作,我更新了属性中的包含目录:
然而,在资源管理器中只显示 command.h
和 settings.h
,而不显示 base_command.h
:
此外,base_command.cpp
和 settings.cpp
也不显示在源文件中,所以我更新了(类似于包含目录)源目录:
这解决了我注意到的第一个问题,但现在是 LNK2019。我相信这是前一个问题的相关结果,因为源文件未知:
所以在许多其他 SO 帖子之后,我尝试更新链接器设置但没有成功:
我对 Visual Studio 2017 环境不是很熟悉,所以如果有人可以提供有关如何配置这些设置的输入以便我可以编译,我将不胜感激。
您需要将所有 .cpp 文件作为现有项添加到您的项目中。 IDE 仅仅位于一个目录中不足以让 IDE 知道编译这些文件。 Headers 通过 #include 按目录找到,但您仍应将它们作为现有项添加到您的项目中,以便更容易在树视图中导航它们。
这就是您遇到链接器错误的原因:settings.cpp 和 base_command.cpp 中的代码永远不会构建。