Visual c++ 为什么链接器会尝试链接到我从未让它链接到的文件?

Visual c++ 为什么链接器会尝试链接到我从未让它链接到的文件?,visual-c++,linker,static-libraries,wxwidgets,static-linking,Visual C++,Linker,Static Libraries,Wxwidgets,Static Linking,我收到一个链接器错误,表明链接器无法打开静态库中的文件,因此失败。我很难排除这个错误,因为我从未告诉链接器链接到它无法打开的文件 我告诉链接器链接到几个静态库。我链接到的许多库都是wxWidgets静态库。我不需要wxWidgets中的所有模块,所以有一些是我正在链接的,而有许多不是。链接器无法打开的文件是“wxbase31ud_net.lib”。正如我所说,该文件不在我链接到的库中。我的直接想法是,这种依赖关系是以某种方式隐式引入的,可能是由我链接到的一个wxwidgets库引入的。我不认为静

我收到一个链接器错误,表明链接器无法打开静态库中的文件,因此失败。我很难排除这个错误,因为我从未告诉链接器链接到它无法打开的文件

我告诉链接器链接到几个静态库。我链接到的许多库都是wxWidgets静态库。我不需要wxWidgets中的所有模块,所以有一些是我正在链接的,而有许多不是。链接器无法打开的文件是“wxbase31ud_net.lib”。正如我所说,该文件不在我链接到的库中。我的直接想法是,这种依赖关系是以某种方式隐式引入的,可能是由我链接到的一个wxwidgets库引入的。我不认为静态链接是这样工作的,但我没有其他想法。我一直在调查这种可能性,但没有发现任何迹象表明情况确实如此

我将构建输出详细度设置为最大值,在报告错误之前,不会在任何地方提到“wxbase31ud_net.lib”。 我在我的cmake项目中确认,所讨论的文件从未从FindWxWidgets模块传回给我,也从未在我与目标关联的任何文件列表中引用过。 我浏览了整个项目目录,在任何地方都没有找到该文件的引用,包括cmake生成的项目文件visual studio项目文件。 是什么导致链接器尝试打开此文件


编辑:另外,要明确的是,我看到的错误是

它可能来自pragma commentlib,???除了wx的情况外,pragma的参数可能是复杂的宏,并且很难grep。这个特定的可能来自setup.h,带有pragma commentlib,wxWX_LIB_NAMEbase。您应该通过将带有wx libs的目录添加到链接器的搜索目录来解决此问题。

它可能来自pragma commentlib,???除了wx的情况外,pragma的参数可能是复杂的宏,并且很难grep。这个特定的可能来自setup.h,带有pragma commentlib,wxWX_LIB_NAMEbase。您应该通过将带有wx libs的目录添加到链接器的搜索目录来解决这个问题。

zeromus的回答是正确的,这几乎可以肯定是因为包含pragma commentlibs的msvc/wx/setup.h。可能的解决办法:

最简单的方法是:构建所有库,这将解决错误,并且链接不使用的库不是问题。 同样简单但不那么明显:在构建项目时预定义wxNO_NET_LIB,这将防止上面的文件自动链接这个特定的库。当然,如果缺少其他库,您可能需要定义更多的wxNO_XXX_库符号。 不那么简单,但可以说是最不神奇的:停止在include路径中使用$WXWIN/include/msvc,那么它下面的wx/setup.h将不会被包含,也不会自动链接任何内容。缺点是您必须指定所有需要手动链接的库。
zeromus的回答是正确的,这几乎可以肯定是由于包含了包含pragma commentlibs的msvc/wx/setup.h。可能的解决办法:

最简单的方法是:构建所有库,这将解决错误,并且链接不使用的库不是问题。 同样简单但不那么明显:在构建项目时预定义wxNO_NET_LIB,这将防止上面的文件自动链接这个特定的库。当然,如果缺少其他库,您可能需要定义更多的wxNO_XXX_库符号。 不那么简单,但可以说是最不神奇的:停止在include路径中使用$WXWIN/include/msvc,那么它下面的wx/setup.h将不会被包含,也不会自动链接任何内容。缺点是您必须指定所有需要手动链接的库。
谢谢,我确实通过链接到整个目录解决了这个问题。谢谢,我确实通过链接到整个目录解决了这个问题。