0

我有一个项目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();
}
4

1 回答 1

0

尝试使用 Visual Studiodumpbin来查看 lib3.lib 是否导出了您需要的函数。如果不这样做,则需要在lib3.hwith中声明您的函数__declspec(dllexport),以使它们对尝试链接到您的库的其他模块可见。

于 2013-03-28T13:34:08.147 回答