【发布时间】:2014-02-11 07:02:23
【问题描述】:
我有以下 Qt 项目结构:
静态库 #1
public class LibraryClass
{
public int Test();
}
静态库 #2(引用库 #1)
void SomeMethod()
{
...
x = library1Instance.Test();
...
}
可执行文件(引用库 #1 和库 #2)
void SomeOtherMethod()
{
...
library2Instance.SomeMethod();
...
}
库 #1 和库 #2 编译时没有错误。但是当我尝试编译可执行文件时,出现错误“未定义对 LibaryClass::Test() 的引用”。这意味着库 #1 是在没有 LibraryClass::Test() 方法的情况下链接的。
如果我在库 #1 中创建另一个类,并将该类引用到 LibaryClass::Test() 方法,那么一切都会编译。
据我了解,编译器省略了 LibaryClass::Test() 方法,因为它找不到对其的内部引用。所以,我应该以某种方式将其标记为导出方法或其他东西。我该怎么做?
【问题讨论】:
-
你是如何链接程序的?静态库的顺序很重要:#1 必须在 #2 之后才能解决依赖关系。
-
如何查看链接顺序?我正在使用 Qt Creator。我能找到的唯一同时存在库#1 和#2 的地方是executable.pro 文件(这是我引用这些库的地方)
-
是的,看来我应该将 library#1 引用放在 .pro 文件的最后。谢谢,迈克!
标签: c++ qt compiler-errors mingw qmake