繁体   English   中英

带有C ++的VLC Api-.lib的链接器错误(即使将其添加到VC ++项目中)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM