eclipse 在构建应用程序时,MinGW Linker的wxWidgets库的正确顺序是什么?

hgc7kmma  于 5个月前  发布在  Eclipse
关注(0)|答案(3)|浏览(38)

几天来,我一直在研究wxWidgets。我成功地编译了libs,并构建了最小的示例和另一个教程示例。所有这些都是在Win 10下使用MinGW GCC 12.2和Eclipse CDT。
现在我创建了一个XRC文件,并从教程中获取了一个小程序来使用这个XRC文件,但这产生了一长串未定义的引用链接器错误。在寻找解决方案时,我发现了一些提示,这可能与链接器设置中给出的库的顺序有关。此外,我还找到了wxWidgets库的依赖关系图,并开始在链接器设置中重新使用库。我设法大大减少了错误的数量,并最终成功链接没有任何错误。
我的问题是:

  • 为什么顺序很重要?
  • 是否有一个正确的顺序,或者它依赖于我的程序,如包括头文件?
  • 我在哪里可以找到正确的订单或我如何找到它?(这一次花了我三个小时!)
  • 我如何确定哪些库是需要的?

感谢您的任何帮助!

jslywgbw

jslywgbw1#

1.我怎样才能知道库的顺序?
您可以尝试构建在samples\xrc目录中找到的xrc示例,方法与构建最小示例的方法相同,然后查看生成的命令。2.为什么它很重要?
因为如果库A中的函数调用库B中的函数,链接器首先需要知道库B是什么。它不能猜测库B中的函数在哪里。所以它抛出一个对函数XXX的未定义引用。
HTH的。

qvtsj1bj

qvtsj1bj2#

使用GNU GCC(mingw是它的Windows版本)的库的顺序很重要。
为什么顺序很重要?
在此Q&A中看到了很好的解释
是否有一个正确的顺序,或者它依赖于我的程序,如包括头文件?
正确的顺序取决于函数被调用的位置和实现的位置。这里不涉及头。
我在哪里可以找到正确的订单或如何找到它?
我如何确定哪些库是需要的?
在wx最小样本目录中,您可以找到makefile.gcc
最后,寻找像$(__WXLIB_CORE_p)这样的宏,它表明你需要libwxmsw32ud_core.a(确切的名称取决于你的wx配置)。
还要查找-luser32(低“L”)等。它们可能是Windows所需的库。再次将它们全部添加。

wydwbb8l

wydwbb8l3#

为什么顺序很重要?
这就是链接器的工作方式,至少在使用静态链接时是这样。另一个答案已经提供了一个链接,指向一个更详细的答案。
是否有一个正确的顺序,或者它依赖于我的程序,如包括头文件?
顺序对应于库依赖项,不受包含的头文件的影响。
我能找到正确的订单吗?或者我怎么才能找到?
一般来说,如果你得到一个你已经链接的库的未定义的符号,你需要把这个库移到列表的后面。特别是对于wxWidgets,库的依赖关系是documented here,你需要按照这个顺序指定它们,也就是说,总是链接到A库,-lA -lB库依赖于B库。
我如何确定哪些库是需要的?
对于wxWidgets,每个类或函数都指定了它在哪个库中定义。例如,如果您查看wxWebRequest documentation,您可以在那里看到“Library:wxNet”,这意味着您必须链接到这个库(由于上述原因,它需要在您的链接列表中位于“base”之前)。

相关问题