如何正确处理静态库的依赖关系

How to correctly handle dependencies of static libraries?

本文关键字:依赖 关系 静态 正确处理      更新时间:2023-10-16

我有一个项目LibA,它是一个静态库,使用第三方库Lib3。Project LibA的构建和执行都很好。

我有另一个项目Exe,这是一个可执行文件,使用LibA。这可以编译,但是链接器没有找到Lib3中的函数,这些函数只在LibA中使用。

我尝试过的事情:

  • 将Lib3的位置添加到项目Exe中的库目录路径中(与LibA中引用Lib3的方式相同)
  • 将Lib3的位置添加到链接器的附加库目录
  • 复制Lib3 *。lib文件到LibA项目的输出文件夹中(因此包含LibA *. lib文件)。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();
}

尝试使用Visual Studio的dumpbin来查看lib3。Lib导出了所需的函数。如果您不这样做,您将需要在lib3.h中使用__declspec(dllexport)声明您的函数,以使它们对试图链接到您的库的其他模块可见。