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

时间:2013-03-28 13:00:53

标签: c++ visual-studio-2010 static-libraries

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

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

我尝试过的事情:

  • 将Lib3的位置添加到项目Exe中的Libary目录路径(与LibA中引用Lib3的方式相同)
  • 将Lib3的位置添加到链接器的附加库目录
  • 将Lib3 * .lib文件复制到项目LibA的输出文件夹(因此包含LibA * .lib文件)

无论我尝试什么,我仍然得到LNK2019: Unresolved external symbol。只有当我在LibA中删除实际调用Lib3的代码时,我才能正确编译和链接项目。

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

编辑:一些代码澄清:

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();
}

1 个答案:

答案 0 :(得分:0)

尝试使用Visual Studio的dumpbin来查看lib3.lib是否已导出所需的函数。 如果不这样做,则需要在lib3.h中使用__declspec(dllexport)声明您的功能,以使其他尝试链接到您库的模块可见。