mac平台electron native(ffmpeg)模块编译
来源:互联网 发布:客户信息管理系统php 编辑:程序博客网 时间:2024/06/11 13:16
近段时间一直在忙着编译mac平台下ffmpeg库用于electron项目。搜索了很多资料才终于把整个编译过程整通过。
1.查看以下安装说明并安装ffmpeg依赖模块
http://blog.csdn.net/matrix_laboratory/article/details/53519165
http://blog.csdn.net/willib/article/details/52530328
2. 编译FFMPEG模块
#说明:#FFMPEG版本:3.2.2#配置命令:./configure --enable-gpl --enable-version3 --enable-nonfree \--enable-bzlib --enable-iconv --enable-zlib --enable-libopus \--enable-libfdk-aac --enable-libx264 --enable-libvpx --enable-libfreetype \--enable-fontconfig --enable-libass --enable-libssh \--enable-static \--disable-sdl2 \--extra-ldflags=-L/usr/local/lib#编译模块make BITS=64#安装模块至../../ffmpeg_dev64 目录DESTDIR='../../ffmpeg_dev64' make install#修正目录中模块INSTALL_DIR=../../ffmpeg_dev64cp -r $INSTALL_DIR/usr/local/ $INSTALL_DIRrm -r $INSTALL_DIR/usr/#清理垃圾make clean
3.安装electron
#electron:#安装1.4.4版本npm install electron@1.4.4
4.配置node-gyp编译脚本
{"targets":[{"target_name":"xxx", 'include_dirs': [ '.', '../3rd-mac/ffmpeg/include', '../3rd-mac/iojs/deps/uv/include', '../3rd-mac/iojs/deps/npm', '../3rd-mac/iojs/deps/v8', '../3rd-mac/iojs/deps/http_parse', '../3rd-mac/iojs/deps/zlib', '../3rd-mac/iojs/src', '/usr/local/include' ],"sources":["RegisterModules.cpp","xxx.cpp",],'libraries': ["-lstdc++","-lpthread","-lsdl2", "-lavcodec","-lavdevice","-lavfilter","-lavformat","-lavutil","-lpostproc","-lswresample","-lswscale","-lopus","-logg","-lfdk-aac","-lvpx","-lass","-lx264","-liconv","-lfontconfig","-lfreetype","-lssh","-lssl","-lbz2","-lz","-llzma","-framework CoreGraphics","-framework CoreVideo","-framework Foundation","-framework AVFoundation","-framework CoreMedia","-framework QuartzCore","-framework AppKit","-framework OpenGL","-framework VideoDecodeAcceleration","-framework CoreFoundation","-framework CoreServices","-framework Security" ], 'xcode_settings': { 'GCC_ENABLE_CPP_EXCEPTIONS': 'NO', 'OTHER_CFLAGS':[ '-std=c++11', '-stdlib=libc++' ] },'defines': [ ], 'cflags-cc':[ ], 'cflags':[ ], 'ldflags':[ ],}]}
5.node-gyp编译模块
#!/bin/shLDFLAGS='-L../../xxx/ -L/usr/local/lib/ -L../../3rd-mac/ffmpeg/lib/' node-gyp rebuild --target=1.4.4 --arch=x64 --dist-url=https://atom.io/download/electron
6.makefile编译脚本
CC = gccCXX = g++AR = arRM = rm -rf#原始目录SRC_PATH :=.#目标名TARGET :=xxx#源文件SRCS += $(wildcard $(SRC_PATH)/*.cpp)#中间文件OBJS := $(SRCS:.cpp=.o)#node模块动态库路径NODE_MODULE_PATH="/usr/local/lib/node_modules/electron/dist/Electron.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Libraries"#动态库LIBS := stdc++ pthread sdl2 \avcodec avdevice avfilter avformat avutil postproc swresample swscaleLIBS += opus ogg fdk-aac vpx ass x264 iconv fontconfig freetype ssh ssl bz2 z lzmaFRAMEWORK := Foundation AVFoundation CoreFoundation VideoToolbox AudioToolbox CoreMedia CoreVideo \QuartzCore AppKit OpenGL \CoreServices Security Security \CoreGraphics VideoDecodeAcceleration CoreServices#模块头文件MODULE_INCLUDE_PATH = ../3rd-mac/ffmpeg/include ../3rd-mac/iojs/deps/uv/include \../3rd-mac/iojs/deps/npm ../3rd-mac/iojs/deps/v8/include \../3rd-mac/iojs/deps/http_parse ../3rd-mac/iojs/deps/zlib ../3rd-mac/iojs/src#模块库文件MOULE_LIBRARY_PATH = ../3rd-mac/ffmpeg/lib/ /usr/lib/ /usr/local/lib/ /usr/local/opt/openssl/lib/ LD_LIBRARY_PATH = -L$(NODE_MODULE_PATH)#头文件路径INCLUDE_PATH :=. #动态库路径LIBRARY_PATH :=../xxx INCLUDE_PATH += $(MODULE_INCLUDE_PATH)LIBRARY_PATH += $(MOULE_LIBRARY_PATH)RELEASE = 1BITS =#ifeq ( 1 , ${DBG_ENABLE} )#CFLAGS += -D_DEBUG -O0 -g -DDEBUG=1#endifCFLAGS = -Wall -std=c++11 -stdlib=libc++LFLAGS =#头文件CFLAGS += $(foreach dir,$(INCLUDE_PATH),-I$(dir))#库路径LDFLAGS += $(foreach lib,$(LIBRARY_PATH),-L$(lib))#库名LDFLAGS += $(foreach lib,$(LIBS),-l$(lib))#框架名LDFLAGS += $(foreach lib,$(FRAMEWORK),-framework $(lib))LDFLAGS +=$(LD_LIBRARY_PATH)#延迟加载模块LDFLAGS += -Wl,-L$(NODE_MODULE_PATH),-lazy-lnode#检查版本ifeq ($(RELEASE),0)#debugCFLAGS += -gelse#releaseCFLAGS += -O3 -DNDEBUGendif#检查位宽ifeq ($(BITS),32)CFLAGS += -m32LFLAGS += -m32elseifeq ($(BITS),64)CFLAGS += -m64LFLAGS += -m64elseendifendif#操作命令all:clean dynamic$(OBJS):%.o:%.cpp$(CXX) $(CFLAGS) -c $^ -o $@build:$(OBJS)$(CXX) $(LFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)$(RM) $(OBJS)packet:$(OBJS)$(AR) -r $(TARGET).a $(OBJS)$(RM) $(OBJS)dynamic:$(CXX) -fPIC -shared $(SRCS) $(CFLAGS) $(LDFLAGS) $(LFLAGS) -o $(TARGET).node$(RM) $(OBJS)clean:echo $(SRCS)$(RM) $(OBJS) $(TARGET)$(TARGET).a
7.修改electron-build 的package.Json
{ "name": "xxx", "version": "0.0.1", "win32metadata":{ "CompanyName":"1", "FileDescription":"2", "OriginalFilename":"3", "ProductName":"4", "InternalName":"5" }, "revision":"0.0.1", "devDependencies": { "electron-prebuilt": "^1.4.4", "electron-builder": "^10.9.2" }, "homepage": "http://evomotion.com", "description": "xxx Release Version.", "author": "xxx Tech Inc.", "license": "ISC", "build": { "appId":"M8Y3XUZGHE", "asar":true, "directories":{ "app":"../xxx.app/Contents/Resources/app/" }, "extraResources":[ { "from": "../dylib/", "to": "${arch}/../../dylib/", "filter": ["**/*.dylib", "!**/*.node"] } ], "dmg":{ "title": "xxx", "icon": "title.icns", "window":{ "x":400, "y":400 } }, "mac": { "title": "xxx", "target":"dmg", "background": "title.png", "icon": "title.icns", "fileAssociations":{ "name":"Applications", "icon":"title.icns" }, "icon-size": 128 }, "nsis":{ "installerIcon":"title.ico", "installerHeader":"title.png", "installerHeaderIcon":"title.ico", "oneClick":false, "allowToChangeInstallationDirectory":true, "runAfterFinish":false },"win": { "target": "nsis", "title": "xxx", "legalTrademarks":"http://www.evomotion.com/", "icon": "title.ico" } }, "scripts": { "dist": "npm run dist:mac", "dist:mac": "build --platform darwin --arch x64 ", "dist:win": "build --platform win32 --arch all ", "dist:linux": "build --platform linux --arch x64 " }}
8.修正模块依赖路径
#!/bin/shPRODUCT_PATH=../dylibINSTALL_PATH=/usr/local/libLOAD_PATH=@rpath/../dylibPRODUCT_NAME=$PRODUCT_PATH/xxx.nodeinstall_name_tool -change "$INSTALL_PATH/libSDL2-2.0.0.dylib" "$LOAD_PATH/libSDL2.dylib" "$PRODUCT_NAME"install_name_tool -change "$INSTALL_PATH/libopus.0.dylib" "$LOAD_PATH/libopus.0.dylib" "$PRODUCT_NAME"install_name_tool -change "$INSTALL_PATH/libogg.0.dylib" "$LOAD_PATH/libogg.0.dylib" "$PRODUCT_NAME"install_name_tool -change "$INSTALL_PATH/libfdk-aac.1.dylib" "$LOAD_PATH/libfdk-aac.1.dylib" "$PRODUCT_NAME"install_name_tool -change "$INSTALL_PATH/libx264.146.dylib" "$LOAD_PATH/libx264.146.dylib" "$PRODUCT_NAME"install_name_tool -change "$INSTALL_PATH/liblzma.5.dylib" "$LOAD_PATH/liblzma.5.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/libass/lib/libass.9.dylib" "$LOAD_PATH/libass.9.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/fontconfig/lib/libfontconfig.1.dylib" "$LOAD_PATH/libfontconfig.1.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "$LOAD_PATH/libfreetype.6.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/libssh/lib/libssh.4.dylib" "$LOAD_PATH/libssh.4.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libiconv.2.dylib" "$LOAD_PATH/libiconv.2.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libssl.0.9.8.dylib" "$LOAD_PATH/libssl.0.9.8.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libbz2.1.0.dylib" "$LOAD_PATH/libbz2.1.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libz.1.dylib" "$LOAD_PATH/libz.1.dylib" "$PRODUCT_NAME"LOAD_PATH=@loader_pathPRODUCT_NAME=$PRODUCT_PATH/libSDL2.dylibinstall_name_tool -change "/usr/lib/libiconv.2.dylib" "$LOAD_PATH/libiconv.2.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libass.9.dylibinstall_name_tool -change "/usr/lib/libiconv.2.dylib" "$LOAD_PATH/libiconv.2.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/fribidi/lib/libfribidi.0.dylib" "$LOAD_PATH/libfribidi.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "$LOAD_PATH/libglib-2.0.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "$LOAD_PATH/libintl.8.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/fontconfig/lib/libfontconfig.1.dylib" "$LOAD_PATH/libfontconfig.1.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "$LOAD_PATH/libfreetype.6.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/harfbuzz/lib/libharfbuzz.0.dylib" "$LOAD_PATH/libharfbuzz.0.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libfribidi.0.dylibinstall_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "$LOAD_PATH/libglib-2.0.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "$LOAD_PATH/libintl.8.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libglib-2.0.0.dylibinstall_name_tool -change "/usr/lib/libiconv.2.dylib" "$LOAD_PATH/libiconv.2.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/pcre/lib/libpcre.1.dylib" "$LOAD_PATH/libpcre.1.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "$LOAD_PATH/libintl.8.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libintl.8.dylibinstall_name_tool -change "/usr/lib/libiconv.2.dylib" "$LOAD_PATH/libiconv.2.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libharfbuzz.0.dylibinstall_name_tool -change "/usr/local/opt/glib/lib/libglib-2.0.0.dylib" "$LOAD_PATH/libglib-2.0.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/gettext/lib/libintl.8.dylib" "$LOAD_PATH/libintl.8.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "$LOAD_PATH/libfreetype.6.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libfontconfig.1.dylibinstall_name_tool -change "/usr/local/opt/freetype/lib/libfreetype.6.dylib" "$LOAD_PATH/libfreetype.6.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libexpat.1.dylib" "$LOAD_PATH/libexpat.1.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libfreetype.6.dylibinstall_name_tool -change "/usr/lib/libz.1.dylib" "$LOAD_PATH/libz.1.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libbz2.1.0.dylib" "$LOAD_PATH/libbz2.1.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/local/opt/libpng/lib/libpng16.16.dylib" "$LOAD_PATH/libpng16.16.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libpng16.16.dylibinstall_name_tool -change "/usr/lib/libz.1.dylib" "$LOAD_PATH/libz.1.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libssh.4.dylibinstall_name_tool -change "/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib" "$LOAD_PATH/libcrypto.1.0.0.dylib" "$PRODUCT_NAME"install_name_tool -change "/usr/lib/libz.1.dylib" "$LOAD_PATH/libz.1.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libssl.0.9.8.dylibinstall_name_tool -change "/usr/lib/libcrypto.0.9.8.dylib" "$LOAD_PATH/libcrypto.0.9.8.dylib" "$PRODUCT_NAME"PRODUCT_NAME=$PRODUCT_PATH/libcrypto.0.9.8.dylibinstall_name_tool -change "/usr/lib/libz.1.dylib" "$LOAD_PATH/libz.1.dylib" "$PRODUCT_NAME"
备注:
如果在运行node模块时出现Module did not self-register问题,请检查node模块导出函数是否正确.
0 0
- mac平台electron native(ffmpeg)模块编译
- mac下 ffmpeg 编译到android平台(支持 frei0r)
- mac 平台下编译android版本 ffmpeg+h264
- Mac环境下编译Android平台的ffmpeg
- FFmpeg-3.3.1移植到Android平台(Mac编译)
- Mac下编译FFmpeg
- mac下编译ffmpeg
- mac下编译ffmpeg
- MAC下编译ffmpeg
- Mac编译ffmpeg
- Windows平台编译ffmpeg
- FFmpeg windows平台编译
- FFmpeg windows平台编译
- FFmpeg windows平台编译
- FFmpeg windows平台编译
- FFMPEG WINDOWS平台编译
- FFmpeg windows平台编译
- FFmpeg windows平台编译
- 简单介绍 request response session
- Go Lang开发环境搭建配置
- 高性能Web服务器 Lighttpd
- vue-cli搭建项目解决跨域问题
- poj 3581
- mac平台electron native(ffmpeg)模块编译
- 关于ActiveMQ的简单整理(5)
- 基于maven的springmvc项目创建
- 大数据测试 VS 传统数据库测试 & 测试环境需求
- Google GMS(CTS, GTS,CTSVerifier)
- 在Linux系统上安装mysql
- 负载均衡(LVS/HAProxy/Nginx)简介和对比
- javascript 中出现missing ) after argument list的错误
- setsockopt() 函数