C++ g++链接器顺序问题

C++ g++链接器顺序问题,c++,linker,g++,C++,Linker,G++,我试图找出在Qt Creator中编译代码时导致错误的原因,即在外部构建的库中进行链接 它抱怨对myclass::myclassargs构造函数的引用未定义 但是,该类已经构建,并且对象文件包含在名为common.a的存档中 引用myclass的代码实际上位于另一个名为CSV.a的库中 所以,我知道我的Qt项目可以看到CSV.a,而且我知道还有其他对共同点a的引用,它没有抱怨,但很明显,CSV中的东西。a看不到共同点。a在这种安排中 我需要做什么不同的事情呢?您可能需要确保在链接器命令行上CSV

我试图找出在Qt Creator中编译代码时导致错误的原因,即在外部构建的库中进行链接

它抱怨对myclass::myclassargs构造函数的引用未定义

但是,该类已经构建,并且对象文件包含在名为common.a的存档中

引用myclass的代码实际上位于另一个名为CSV.a的库中

所以,我知道我的Qt项目可以看到CSV.a,而且我知道还有其他对共同点a的引用,它没有抱怨,但很明显,CSV中的东西。a看不到共同点。a在这种安排中


我需要做什么不同的事情呢?

您可能需要确保在链接器命令行上CSV.a后跟common.a,而不是相反。

您可能需要确保在链接器命令行上CSV.a后跟common.a,反之亦然。

链接器使用命令行上列出的库的顺序来确定实际需要哪些符号。你需要把它们从最依赖的排列到最不依赖的排列,这样它才能做出决定。例如,首先列出CSV.a,以便编译器知道它需要在某处找到myclass::myclassargs。然后列出common。再过一秒钟,编译器将找到并链接该构造函数。

链接器使用命令行上列出库的顺序来确定实际需要哪些符号。你需要把它们从最依赖的排列到最不依赖的排列,这样它才能做出决定。例如,首先列出CSV.a,以便编译器知道它需要在某处找到myclass::myclassargs。然后列出common。再过一秒,编译器将找到并链接该构造函数。

您定义了该构造函数吗?是的,该构造函数是在myclass.cpp文件中定义的,并且生成了myclass.o,并包含在存档common中。这是否解决了您的问题:您定义了该构造函数吗?是的,构造函数是在myclass.cpp文件中定义的,生成了myclass.o,并包含在公共归档文件中。这可以解决您的问题:回答正确,但我选择maxim's是因为他在第一个回答中,而我选择maxim's是因为他在第一个回答中