如何使链接器查看不在解决方案中的文件

How to make the Linker see files that aren't in the solution

提问人:dryfish 提问时间:5/11/2023 最后编辑:cafce25dryfish 更新时间:5/12/2023 访问量:55

问:

我知道有与我将要问的问题类似的问题,但没有一个解决方案对我有用,其他问题也没有特别描述我的情况。

这是我的具体情况:我正在使用 Visual Studio 2022 社区版。我有一个解决方案。在这个解决方案中,我有 3 个项目。在解决方案上下文之外(但在解决方案文件夹内),我有一个文件夹,其中包含 .h 和相应的 .c 文件,其中我有一些结构、函数和定义,我想在我的项目之间共享,这意味着,我会在项目的不同文件中包含一些(或全部).h(#include“path_to_file\file1.h” ...),以便能够访问这些文件中的代码,以及我的其他项目中的代码。

我设法通过手动将我需要的文件作为“现有项目”添加到每个项目中来完成这项工作。然而,这很可怕,仅仅是因为它不是解决我问题的可扩展解决方案。我想做的就是,对于每个项目(或整个解决方案,但我认为这是不可能的,因为每个项目都是单独构建的),告诉链接器该文件夹的相对路径,其中包含不属于解决方案的 .h.c 文件,并且在链接过程中会考虑它们。

如果以某种方式将文件添加到解决方案中会使问题更简单,我愿意这样做,情况的性质允许这样做。

我试着弄乱项目属性。我添加了 C/C++ > General > Additional Include Directories 的相对路径(我添加了 $(SolutionDir)\global,global 是文件所在的文件夹的名称),我还添加了 Link > General > Additional Library Directories(与我上面添加的内容相同)。没有什么能真正解决我遇到的链接器错误。IDE 发现文件很好,当我在项目中使用它们时,代码会自然到声明和定义,甚至自动完成也可以工作,但是当我尝试构建时,链接器永远不会找到任何东西。这些是我遇到的错误:

source.obj:错误 LNK2019:函数 Init 中引用的未解析外部符号 CheckNullVa source.obj:错误 LNK2019:函数 LoadInitialValues 中引用的未解析外部符号 InRange (...)

基本上,我尝试使用的每个函数的错误都来自这些解决方案外部文件。

我还尝试在解决方案中创建一个新项目,在那里添加文件,然后再次尝试在要包含它们的项目中设置相同的属性,并右键单击项目“生成依赖项”>“项目依赖项...”,然后选中我创建的包含文件的这个新项目旁边的框。这导致了完全相同的问题。

我只能通过手动逐个文件地将文件添加到我想要访问的每个项目中,通过添加>现有项目来使其工作......这可行,但这不是我正在寻找的解决方案。

c visual-studio 链接 链接器错误 visual-studio-2022

评论

0赞 Ext3h 5/11/2023
你问的是“什么是静态库,如何使用Visual Studio定义它们” - 后半部分的答案是:“Visual Studio中的C++支持非常糟糕 - 使用CMake或其他生成器为您创建项目结构”。否则,您必须手动单独添加链接器和编译器搜索路径。
0赞 Ext3h 5/11/2023
learn.microsoft.com/en-us/cpp/build/......
0赞 dryfish 5/11/2023
@Ext3h我了解 Visual Studio C,C++支持不是最好的。在我的情况下,手动添加链接器和编译器搜索路径仍然失败,因此我在这里寻求帮助。我会看看你链接的文档。
0赞 dryfish 5/11/2023
@Ext3h您提供的链接解决了我的问题,非常感谢。如果您将其作为答案,我可以将其标记为解决方案,或者如果此问题在另一个线程中有重复的答案,请随时将其标记为重复并将人们重定向到另一个线程。谢谢。
0赞 Community 5/11/2023
请编辑问题,将其限制在特定问题上,并具有足够的细节以确定适当的答案。

答: 暂无答案