我想根据https://wiki.videolan.org/LibVLC_Tutorial/编译使用VLC Api的示例C ++程序,使用Windows 7 x64上的Visual Studio 2012(无论如何我都使用x86)。
为了获得.lib
文件,我跟进了https://wiki.videolan.org/GenerateLibFromDll/。我在开始时遇到了一些问题,但最后我得到了(我已经注意到警告):
我确实创建了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
答案 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位版本。