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

时间:2014-12-29 09:30:30

标签: c++ visual-studio-2012 vlc static-linking libvlc

我想根据https://wiki.videolan.org/LibVLC_Tutorial/编译使用VLC Api的示例C ++程序,使用Windows 7 x64上的Visual Studio 2012(无论如何我都使用x86)。

为了获得.lib文件,我跟进了https://wiki.videolan.org/GenerateLibFromDll/。我在开始时遇到了一些问题,但最后我得到了(我已经注意到警告): enter image description here

我确实创建了libvlc.lib。我已将其移至包含main.cpp的文件夹,添加了Project -> VC++ Directories -> Library directories的路径,并添加了.lib文件Add -> existing item。我还添加了Project -> VC++ Directories -> Include Directories,因此它指向...vlc-2.1.5\include

我在我的空解决方案上运行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& #34)。这确实是一个问题。在更改之后,我得到了更多的警告(所有类型都与以前一样,277在一起)和更大的.def文件(15MB,进度)。但输出.lib文件的大小完全相同(1.48MB - 它非常小.lib)并且链接器错误占优势。所以我觉得.lib创建还有问题。

.def文件:http://pastebin.com/E81s6dnh 最后一行让我感到不舒服:

    256   FF 00001CF0 libvlc_vprinterr
    257  100 00001790 libvlc_wait
LINK : fatal error LNK1328: missing string table

2 个答案:

答案 0 :(得分:0)

在屏幕截图中检查dumpbin命令,

  

" libvlc.dill"应该是" libvlc.dll"

一般来说,当链接器的所有输入都是正确的&但是如果链接器抱怨那么我会专门看一些lib import #defines。有时,只能导入.lib而不在链接器输入设置中定义一些允许导入lib的#DEFINE。例如IMPORT_X_LIB。你是否为vlc lib定义了任何这样的import lib #define。如果是,则必须在链接器输入中添加它们。

答案 1 :(得分:0)

Wiki上的说明中有错误。

(1)您需要通过从here下载“ Windows”安装程序来安装32位版本的VLC,而不是64位版本。

(2)它安装到“ C:\ Program Files(x86)\”文件夹中,而不是“ C:\ Program Files \”文件夹中。您需要使用此文件夹替换项来运行Wiki页面上的所有说明。

(3)然后,您需要将Visual Studio项目编译为x86项目。

(4)编译时,需要将以下库文件从上面(2)中的文件夹复制到构建可执行文件的“调试/发布”目录中。

pressed
Re-running batch
I have been called from the datagrid!!!!

(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位版本。