2011-04-16 82 views
1

我在Visual Studio 2010中构建了一个名为ITPP的开源C++库。它的构建成功,因此我尝试构建测试程序随它一起来尝试。我在测试程序中发现链接错误,说我建的第一个库有一些链接错误,因为它找不到某些函数。C++项目编译和链接瓦特/丢失库

我想我知道什么库缺少,但它就像VS不在乎。

什么是可能的原因,当我直接建立它的库链接正确,但是当我尝试在某处使用它时,IDE说我创建的lib有链接错误?

感谢,

MJ

+2

.lib没有链接,它只是一包.obj文件。 – 2011-04-16 13:58:15

+1

我正在Windows 7上编译项目,所以我在Linux上尝试了它。这就是它:)。 – 2011-04-18 17:18:44

回答

2
  1. 有测试程序设置上正确的lib的依赖?您是否已将您的新库所在的目录添加到Visual Studios搜索路径中? (工具 - >选项 - >项目和解决方案 - > VC++目录)。测试应用程序在链接器“其他依赖项”选项下列出lib(检查项目属性 - >链接器 - >输入 - >附加依赖项)。或者,如果测试应用程序在相同的解决方案中,则在测试应用程序的“项目依赖项”下,是依赖项下列出的lib项目。

  2. .lib是一个导入lib到dll吗?导入库仅仅是一个dll的前端。它会导致你的dll/exe在启动时自动加载dll,并在退出时取消dll。它还为dll中的所有符号提供静态前端。可能发生的问题包括如果dll中的符号未导出,因此未放置在导入库中,导致链接器错误。

  3. 在visual studio中,.lib的旧版本与您的测试exe坐在相同的路径中。当我在我的项目中找到.lib文件时,这种情况就会发生在我身上,并且我已将其设置为复制到某个位置,在该位置我的所有公共库都存在于多个项目中。有时我会在测试应用程序的相同解决方案中构建.libs项目。其他时候我会在测试应用程序之外构建它。当您在解决方案中构建它时,lib将被复制到与您的测试可执行文件相同的目录中。这首先在链接期间的lib搜索路径中。

  4. 在链接器的搜索路径的其他地方是否存在旧版本的lib?和上面3中一样,事情可能发生在这里。

  5. 如果一切都失败打开详细链接如指示here。查看视觉工作室从哪里导入库,看看它是否符合你的期望。

2

即使其中引用的某些符号(函数/变量)不可用,也会生成一个静态库。当您尝试构建DLL或EXE时,,然后必须提供所有引用的符号 - 因此,您得到的错误表明这些符号确实缺失,并且您的库或任何其他库/源都不提供它。