我不明白 Visual Studio(对我来说是 2015)如何从头文件中检测到 .lib 文件名。
示例 1
我用 boost/asio
编写一个简单的程序来通过 HTTP 请求进行连接。源文件包括<boost/asio.hpp>
在它的上面。我还配置了C/C++ / General / Additional Include Directories
指向 boost 的文件夹。
之后,我构建解决方案并遇到错误:
Error LNK1104 cannot open file 'libboost_system-vc140-mt-gd-1_61.lib'
但我不知道 Visual Studio 在哪里找到名称 libboost_system-vc140-mt-gd-1_61.lib
从。
- 正在寻找 Linker / Input / Additional Dependencies / Edit...
对于评估值和继承值,没有名为 libboost_system-vc140-mt-gd-1_61.lib
的项目
- 我认为在<boost/asio.hpp>
它以某种方式向编译器设置了一些信息:“如果你需要 lib 文件,请查找 libboost_system-vc140-mt-gd-1_61.lib,它是我的实现”,但我在 boost 文件夹中搜索,没有源文件包含“libboost_system-vc140-mt-gd-1_61.lib”
一般来说,如果某个函数在头文件中声明,而 Visual Studio 无法归档它的实现,LNK2019: unresolved external symbol ...
将被抛出。
那么如果它的实现在abcxyz.lib
文件,用户转到 Linker / Input / Additional Dependencies
并添加 abcxyz.lib
, 没有 指定包含 .lib 文件的文件夹 Linker / General / Additional Libary Directories
.在这种情况下,Error LNK1104 cannot open file 'abcxyz.lib'
会被抛出
那么,为什么上面的例子遇到的是LNK1104错误,而不是LNK2019错误呢?
示例2
我正在为一个使用 OpenCV 2.4.10 库的项目工作。在分发中,他们给了我带有源代码的项目,但没有将库附加给我。
然后,我下载最新的 OpenCV 2.4.13 并为项目设置,例如附加包含文件夹、附加库文件夹、附加依赖项 ( opencv_core2413.lib
)。
一切看起来都很好,但是当我构建项目时,它给了我错误:
Error LNK1104 cannot open file 'opencv_core2410d.lib'
我看过Linker \ Input \ Additional Dependencies
在评估值(包含opencv_core2413.lib)和继承值上,但没有名为'opencv_core2410d.lib'的项目。
尝试查看该项目应用的另一个共享属性表,但没有名为“opencv_core2410d.lib”的条目
我想删除这个条目,但找不到它在哪里
那么,这里发生了什么?任何人都可以为我解释一下吗?谢谢
最佳答案
LNK1104
让您知道您需要在 Library Directories
中设置库位置。
boost::asio
依赖于 boost::system
来获取错误消息。
boost::system
不是只有头文件的库。
您需要将 boost
库的位置添加到解决方案属性页上 VC++ Directories
下的 Library Directories
。
如果您还没有构建 boost
库,可以阅读一篇如何构建的文章 here或者您可以从 here 下载.
将 OpenCV
库的位置添加到您的解决方案的属性页应该修复示例 2
。
关于c++ - Visual Studio LNK1104 而不是 LNK2019,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38422700/