【发布时间】:2013-03-28 13:00:52
【问题描述】:
我有一个项目LibA,它是一个静态库,使用第三方库Lib3。 LibA 项目的构建和执行都很好。
我有另一个项目 Exe,它是一个可执行文件并使用 LibA。这可以编译,但链接器找不到来自 Lib3 的函数,这些函数仅在 LibA 中使用。
我尝试过的事情:
- 将 Lib3 的位置添加到项目 Exe 中的库目录路径中(与 LibA 中引用 Lib3 的方式相同)
- 将 Lib3 的位置添加到链接器的附加库目录中
- 将 Lib3 *.lib 文件复制到项目 LibA 的输出文件夹(因此包含 LibA *.lib 文件)
无论我尝试什么,我仍然会收到LNK2019: Unresolved external symbol。只有当我在 LibA 中删除实际调用 Lib3 的代码时,我才能正确编译和链接项目 Exe。
如何正确处理静态库的依赖关系?
编辑:需要澄清的一些代码:
LibA 包含 LibA.h 和 LibA.cpp:
LibA.h:
class LibA {
void doSomething();
}
LibA.cpp:
#include "LibA.h"
#include "Lib3.h"
void LibA::doSomething() {
//call stuff in Lib3.h
}
Exe.cpp:
#include "LibA.h"
int _tmain(int argc, _TCHAR* argv[])
{
LibA a = new LibA();
a.doSomething();
}
【问题讨论】:
-
您是否已将
Exe项目路径添加到Lib3库?我认为依赖项不是“继承的”,所以在链接Exe时,编译器应该知道Lib3的路径,即使它没有明确使用(但我可能错了,这就是为什么这是一个注释,而不是答案) -
是的,我在Exe中添加了Lib3库的路径。同样的问题。
-
您是否也添加了库名称
Lib3?不只是路径? -
好吧,在 Visual Studio 设置中我只能添加包含库的目录。这样做足以让 LibA 链接到 Lib3
标签: c++ visual-studio-2010 static-libraries