[英]VLC Api with C++ - linker error for .lib (even when I've added it to my VC++ project)
根据https://wiki.videolan.org/LibVLC_Tutorial/的说明 ,我想使用Windows 7 x64上的Visual Studio 2012编译使用VLC Api的示例C ++程序(无论如何,我都使用x86)。
为了获取.lib
文件,我遵循了: https : //wiki.videolan.org/GenerateLibFromDll/ 。 一开始我遇到了一些问题,但是最后我得到了(我注意到了警告):
我确实创建了libvlc.lib
。 我已经将它移动到了main.cpp
文件夹中,将路径添加到Project -> VC++ Directories -> Library directories
,并添加了.lib
文件和.lib
Add -> existing item
。 我还添加了Project -> VC++ Directories -> Include Directories
因此它指向...vlc-2.1.5\\include
。
我运行clean, rebuild all
在空解决方案上clean, rebuild all
。
不幸的是我得到了错误:
1>------ Rebuild All started: Project: Project1, Configuration: Debug Win32 ------
1> Source.cpp
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_new referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_release referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_media_new_location referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_media_release referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_media_player_new_from_media referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_media_player_release referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_media_player_play referenced in function _main
1>Source.obj : error LNK2019: unresolved external symbol _libvlc_media_player_stop referenced in function _main
1>...\Project1\Debug\Project1.exe : fatal error LNK1120: 8 unresolved externals
看来我的.lib
出问题或以某种方式未正确连接。 编译工作正常,链接失败。
项目中唯一的.cpp
文件的完整源代码是videolan.org上发布的教程的完整副本: http : //pastebin.com/5gfFVFZd
根据@user1
评论,我已更正了dumpbin
命令(在屏幕截图中,“ libvlc.dill”应为“ libvlc.dll”)。 这确实是一个问题。 更改之后,我得到了更多的警告(所有警告均与以前相同,共277个)和更大的.def文件(15MB,进度)。 但是输出的.lib文件大小完全相同(1.48MB-这是一个很小的.lib文件),因此普遍存在链接器错误。 因此,我猜.lib创建仍然有问题。
.def
文件: http : //pastebin.com/E81s6dnh最后.def
行让我感到不舒服:
256 FF 00001CF0 libvlc_vprinterr
257 100 00001790 libvlc_wait
LINK : fatal error LNK1328: missing string table
检查屏幕快照中的dumpbin
命令,
“ libvlc.dill”应为“ libvlc.dll”
一般来说,当所有对链接器的输入都是正确的,但是如果链接器抱怨,那么我会专门查看一些lib import #defines。 有时,不能仅在链接器输入设置中未定义一些#DEFINE即可导入.lib,这样可以导入lib。 例如IMPORT_X_LIB。 您是否为vlc lib定义了任何这样的import lib #define。 如果是,则必须在链接器输入中添加它们。
Wiki上的说明中有错误。
(1)您需要通过从此处下载“ Windows”安装程序来安装32位版本的VLC,而不是64位版本。
(2)它安装到“ C:\\ Program Files(x86)\\”文件夹中,而不是“ C:\\ Program Files \\”文件夹中。 您需要使用此文件夹替代物来运行Wiki页面上的所有说明。
(3)然后,您需要将Visual Studio项目编译为x86项目。
(4)编译时,需要将以下库文件从上面(2)的文件夹中复制到构建可执行文件的Debug / Release目录中。
libvlc.dll
libvlc.lib
libvlc.exp
(5)除了从源下载链接到头文件之外,您还需要将“ libvlc.lib”添加到项目中,以:
项目->属性->链接器->输入->其他依赖项
(6)还要添加目录“ C:\\ Program Files(x86)\\ VideoLAN \\ VLC”,这3个库文件的副本驻留在其中:
项目->属性->链接器->常规->其他库导演
(7)现在程序应该链接并运行,而不会出现Application错误。
发生上述错误的原因是:(i)如果没有VS设置,程序将找不到libvlc.lib库要链接到的位置。
(ii)如果没有将3个库文件复制到项目可执行文件所建立的同一目录中,它将找不到要附加的库。
(iii)当它实际链接时,当程序的其余部分是x86时,安装到“ C:\\ Program Files \\”的VLC中的实际DLL是64位版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.