编译使用 libmp4v2库 libmp4v2.lib(atom_tkhd.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday 错误解决办法.
来源:互联网 发布:金特软件 编辑:程序博客网 时间:2024/05/29 19:04
使用mp4v2 写mp43文件出现如下错误:
1>libmp4v2.lib(atom_mvhd.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday
1>libmp4v2.lib(atom_mdhd.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday
1>libmp4v2.lib(mp4file.obj) : error LNK2019: 无法解析的外部符号 _gettimeofday,该符号在函数 "unsigned __int64 __cdecl MP4GetAbsTimestamp(void)" (?MP4GetAbsTimestamp@@YA_KXZ) 中被引用
1>libmp4v2.lib(mp4track.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday
1>libmp4v2.lib(rtphint.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday
1>libmp4v2.lib(atom_tkhd.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday
解决方法:
1.自己提供gettimeofday的定义
2.或者使用其libmissing60.lib(和libmissing60是一回事,60表示vs6下编译通过,实际上我用vc7也编译运行过了)。
1. 自己定义的方法(未验证是否可用).编译可以通过.
static const unsigned __int64 epoch = 116444736000000000L;/*** timezone information is stored outside the kernel so tzp isn't used anymore.*/extern "C" intgettimeofday(struct timeval * tp,void * tzp){FILETIME file_time;SYSTEMTIME system_time;ULARGE_INTEGER ularge;GetSystemTime(&system_time);SystemTimeToFileTime(&system_time, &file_time);ularge.LowPart = file_time.dwLowDateTime;ularge.HighPart = file_time.dwHighDateTime;tp->tv_sec = (long) ((ularge.QuadPart - epoch) / 10000000L);tp->tv_usec = (long) (system_time.wMilliseconds * 1000);return 0;}
来源:点击打开链接
原文:
实际上只是一个头文件h264_util.h。h264_util.h封装了x264库。我做的工作就是使用模板封装了一下,保证使用任何mp4 container库都可以方便地输出mp4文件。使用模板的目的是为了避免任何回调的开销。
h264_util.h依赖于x264库。
main.cpp依赖于h264_util.h和libmp42(可选)和libmp4av(可选),后两者都是mpeg4ip的一部分。使用的mpeg4ip是为了生成Quicktime7可播放的mp4文件(相信我,这点很难的,我试了很多库了。原因不是这些库不好,而是QT7太糟糕)。
附带说明一下,所用到的库和我写的代码都是可以同时在window下和linux编译运行的(我已经都试过了)。要在windows下编译x264很简单的,参考说明文档就可以。麻烦的是mpeg4ip,其文档声称不再会对windows下的兼容性负责了。要在windows下编译并使用mpeg4ip,有两个办法,或者自己提供gettimeofday的定义,或者使用其libmissing(和libmissing60是一回事,60表示vs6下编译通过,实际上我用vc7也编译运行过了)。
如果同时使用x264和mpeg4ip,又会发现一些兼容性问题。问题的关键在于windows操作下默认没有提供int8_t之类的类型定义,于是mpeg4ip会自己提供一个mpeg4ip_version.h,补上这些定义。所有的跨平台的开源项目似乎都会自说自话地为windows平台(linux下有标准头文件)提供这些定义,如果我同时使用两个这样的开源项目,就可能会产生类型重复定义的编译错误。x264是个特例,它的libx264根本就没有提供这些定义,所以我在h264_util.h补上了这些定义。又由于这些类型定义可能和mpeg4ip_version.h中的定义冲突,所以我在h264_util.h中预先加入了判断避免冲突的宏。要这些宏起作用,mpeg4ip的头文件必须先被#include于我的h264_util.h之前。
要编译x264,必须安装nasm(一种汇编语言编译器),mpeg4ip如果是只编译上文中的两个库的话,不需要,否则也需要nasm。
下面就是源代码,包括两个源代码文件,h264_util.h和main.cpp和一个makefile(仅用于linux),GNUmakefile。
h264_util.h封装了x264,main.cpp提供了两个测试例子,一个仅使用h264_util.h演示了如何进行视频编码,另一个测试例子说明了如何生成mp4。test_h264_utilities是在内存中快速生成rgb888的raw image的工具,仅仅是为了我测试方便用,你完全可以不使用它。
使用方法很简单(仅限于于linux,windows下懒得写了),安装libx264,libmp4ip,libmp4v2(./configure;make;make install总会吧?mpeg4ip安装完整的软件包也许会有问题,但是安装库是没问题的(先在源代码包的根目录下./configure,然后还是在对应的库代码的目录里make;make install),把下述三个文件拷贝到同一个目录里,然后make clean;make;./test_main,就会生成一个叫test.mp4的文件。
- 编译使用 libmp4v2库 libmp4v2.lib(atom_tkhd.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday 错误解决办法.
- VC: Nafxcwd.lib(appcore.obj) : error LNK2001: 无法解析的外部符号___argv
- uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory
- uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory
- SkinMagicLib.lib(SkinData.obj) : error LNK2001: 无法解析的外部符号
- uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory
- opencv_highgui2410.lib(window_w32.obj) : error LNK2001: 无法解析的外部符号
- VS调试出错:uafxcw.lib(appcore.obj) : error LNK2001: 无法解析的外部符号 ___wargv
- uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory
- uafxcwd.lib(afxglobals.obj) : error LNK2001: 无法解析的外部符号 _IID_IWICImagingFactory
- 原:.obj : error LNK2001: 无法解析的外部符号 __imp__
- thread_local_storage.obj : error LNK2001: 无法解析的外部符号 pTlsCallback
- ***.obj :error LNK2001: 无法解析的外部符号
- error LNK2001: 无法解析的外部符号 ___argc nafxcwd.lib
- 使用NetCDF库时提示无法链接错误"error LNK2001: 无法解析的外部符号 nc_create"
- Error LNK2001 无法解析的外部符号解决办法 .
- error LNK2001: 无法解析的外部符号 解决办法
- vc2008 错误:error LNK2001: 无法解析的外部符号之一
- Android零基础开发专题一:Android 4.0环境搭建
- 数码机顶盒设置IP
- MTK6592平台 touchpanel驱动设备加载(二)
- Android App 内存泄露之Handler
- Java多线程的wait()和notify()例子
- 编译使用 libmp4v2库 libmp4v2.lib(atom_tkhd.obj) : error LNK2001: 无法解析的外部符号 _gettimeofday 错误解决办法.
- 杭电 4681
- 五大常用算法之一:分治算法
- Akka学习笔记(一):创建Hello World工程
- 从数组里挑出只出现一次的对象
- Android 版本解决
- 突然之间不能访问http://127.0.0.1 http://localhost/
- Android 入门开发指南之一 -- Hello,Android例子
- 五大常用算法之二:动态规划算法