C ++项目编译和链接/缺少库

时间:2011-04-16 12:32:25

标签: c++ visual-studio-2010 linker

我正在Visual Studio 2010中构建一个名为ITPP的开源C ++库。它构建成功,因此我尝试构建它附带的测试程序以便尝试它。我在测试程序中得到链接错误,说我构建的第一个库有一些链接错误,因为它找不到一些函数。

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

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

谢谢,

MJ

2 个答案:

答案 0 :(得分:2)

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

  2. .lib是dll的导入库吗?导入库只是dll的前端。它会导致你的dll / exe在启动时自动加载dll,并在退出时关闭dll。它还为dll中的所有符号提供静态前端。可能发生的问题包括dll中的符号是否未导出,因此未放入导入库中,从而导致链接器错误。

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

  4. 链接器搜索路径上的其他地方是否有较旧的lib副本?此处可能会发生与上面3相同的事情。

  5. 如果所有其他方法都失败按照指示here启用详细链接。查看visual studio从哪里导入lib,看它是否符合您的期望。

答案 1 :(得分:2)

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