Qt for IOS環境的搭建以及ffmpeg庫的編譯與移植
阿新 • • 發佈:2019-02-04
最新版的Qt5.6.0 for IOS,需要xcode7以上的版本,而只有OS X10.11以上才有安裝,所以這裡選擇OS X10.11版本的系統。
系統環境: MAC OSX10.11 VMware12以上(必須的)
軟體環境:Qt5.6.0 for IOS, XCode7(從OSX系統的蘋果商店下載)
一、平臺搭建
Qt5.6.0 for IOS安裝:官網下載後,直接點選安裝
XCode7安裝:通過AppStore安裝
VMware12安裝:下載後直接安裝
上述系統和軟體安裝完成後,下面就可以開發自己的APP軟體。
二、ffmpeg等庫的編譯
1)ffmpeg的編譯, 分別為MAC版本和IOS版本。
MAC版本:
git下載ffmpeg官方原始碼後,進入ffmpeg主目錄,
./configure --prefix=build_ffmpeg(編譯目標目錄,自己先建立的)
make & make install
即可生成可以在MAC OSX上使用的ffmpeg動態庫
三、移植到Qt for IOS中
1)MAC端:
pro新增內容,並將所需庫複製到工程目錄下。
macx {
LIBS += -L"$$PWD/ffmpeg/libs/mac"
LIBS += -lavformat -lavformat.57 -lavformat.57.36.100 -lavdevice -lavdevice.57 -lavdevice.57.0.101 -lavfilter -lavfilter.6 \
-lavfilter.6.45.100 -lavutil -lavutil.55 -lavutil.55.24.100 -lswresample -lswresample.2 -lswresample.2.0.101 \
-lswscale -lswscale.4 -lswscale.4.1.100 -lavcodec -lavcodec.57 -lavcodec.57.42.100
}
2) IOS端:
pro新增內容,並將所需庫複製到工程目錄下。
ios {
LIBS += "$$PWD/ffmpeg/libs/ios/ios_simulator/libavformat.a" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/libavdevice.a" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/libavfilter.a" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/libavutil.a" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/libswresample.a" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/libswscale.a" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/libavcodec.a"
LIBS += "$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libbz2.tbd" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libbz2.1.0.tbd" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libz.1.tbd" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libz.tbd" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libz.1.2.5.tbd" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libz.1.1.3.tbd" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libiconv.2.4.0.dylib" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libiconv.2.dylib" \
"$$PWD/ffmpeg/libs/ios/ios_simulator/xcode_simulator_lib/libiconv.dylib"
LIBS += -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks -framework VideoToolbox
LIBS += -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks -framework CoreMedia
LIBS += -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks -framework CoreVideo
}
如上所示,除了必須的ffmpeg靜態庫外,還需要
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib下的-lbz2 -lbz2.1.0 -lz.1 -lz -lz.1.2.5
-lz.1.1.3 -liconv.2.4.0 -liconv.2 -liconv等動態庫檔案(這是IOS模擬器的路徑,如果是真機則用iPhone目錄的lib檔案),還有框架庫VideoToolbox、CoreMedia、CoreVideo,這些都是需要的,不然編譯會出如下所示,通過檢視qmake編譯過程,可以知道這些庫是否已經連線上:
Undefined symbols for architecture x86_64:"_CMBlockBufferCreateWithMemoryBlock", referenced from:
_videotoolbox_common_end_frame in libavcodec.a(videotoolbox.o)"_CMSampleBufferCreate", referenced from:
_videotoolbox_common_end_frame in libavcodec.a(videotoolbox.o)"_CMVideoFormatDescriptionCreate" , referenced from:
_av_videotoolbox_default_init2 in libavcodec.a(videotoolbox.o)
"_ModPlug_GetCurrentOrder", referenced from:
三、編譯執行
MAC端:選擇Qt for IOS的Destop編譯器
IOS端:選擇iphonesimulator編譯器
程式編譯成功後,開始執行即呼叫Xcode目錄下的虛擬機器,將程式安裝到上面。