macOS下從零開始編譯ffmpeg

1. FFMpeg 編譯選項:

./configure --as=yasm --enable-nonfree --enable-shared --disable-static --enable-ffplay --enable-gpl --enable-pthreads --enable-postproc --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-libspeex --enable-bzlib --enable-zlib --enable-libsnappy --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libfdk-aac --enable-libvpx --enable-encoder=pcm_mulaw --enable-encoder=flac --enable-libgsm --enable-libopus --enable-fontconfig --enable-libfreetype --enable-libass --enable-libbluray --enable-filters --extra-cflags=-mmacosx-version-min=10.9 --extra-ldflags=-mmacosx-version-min=10.9

注意編譯選項:

--extra-cflags=-mmacosx-version-min=10.9 --extra-ldflags=-mmacosx-version-min=10.9

在 macOS 上編譯需要注意這個選項滤钱,指定編譯庫兼容的最低系統(tǒng)版本晕窑,編譯其他依賴庫(動態(tài)庫)的時候也需要指定褪尝,因為編譯出來的動態(tài)庫如果需要打包到app并發(fā)布到AppStore, 必須指定這個亏推,如果不指定,無法上傳到Appstore叁巨。報如下錯誤:

Couldn't find platform family in Info.plist CFBundleSupportedPlatforms or Mach-O LC_VERSION_MIN for libass.9.dylib

如果成功編譯斑匪,使用 otool -l *.dylib 命令查看 load command 8 :

Load command 8
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.9
      sdk 10.14

如果沒有成功指定最低兼容版本就是下面這樣:

Load command 8
       cmd LC_BUILD_VERSION
   cmdsize 32
  platform macos
       sdk 10.14
     minos 10.14
    ntools 1
      tool ld
   version 409.12

這點在macOS上編譯很重要,尤其在產(chǎn)品需要發(fā)布AppStore的情況下锋勺。

2.依賴庫編譯安裝

這里其實也可以直接使用brew安裝依賴庫:

brew install opencore-amr
brew install lame
brew install speex
brew install theora

就像前面所說需要指定最低兼容版本號蚀瘸,所以所有依賴庫都需要下載源碼一個一個編譯:

yasm

libsnappy

libogg

libtheora

libvorbis

opencore-amr

speex

x264

fdk-aac

fontconfig

freetype

fribidi

gsm

gsm源碼編譯不需要configure,項目下自帶 Makefile 文件庶橱,直接執(zhí)行 make 就行贮勃,但是如果想要編譯出動態(tài)庫.dylib文件,需要手動修改 Makefile 文件:

line 143 add :

LIBGSMSO= $(LIB)/libgsm.1.0.13.dylib

line 302 add :

$(LIBGSMSO):    $(LIB) $(GSM_OBJECTS)
        $(LD) "-mmacosx-version-min=10.9" -o $(LIBGSMSO) -dynamiclib -Wl,-compatibility_version,1,-current_version,1.0.13,-install_name,$(LIBGSMSO) $(GSM_OBJECTS) -lc
        ln -fs libgsm.1.0.13.dylib lib/libgsm.1.dylib
        ln -fs libgsm.1.0.13.dylib lib/libgsm.dylib

lame

./configure CFLAGS="-mmacosx-version-min=10.9"
3.100版本源碼下載下來有個編譯問題苏章,用如下方式解決:
Remove the line containing 'lame_init_old' from the file 'include/libmp3lame.sym'

libass

libbluray

SDL2

opus

xvidcore

關(guān)于依賴庫編譯

代碼下載下來后開始逐個編譯安裝寂嘉,基本都遵從 ./configure / make / make install 這個過程:

還是需要注意之前說到過的制定最低兼容系統(tǒng)版本號問題:

by configuring the autotools utility with
     ./configure CFLAGS="-mmacosx-version-min=10.9" LDFLAGS="-mmacosx-version-min=10.9"
 
and by configuring the other cmake utility with
     -D CMAKE_OSX_DEPLOYMENT_TARGET=10.9

3. 關(guān)于動態(tài)庫打包和安裝

編譯出來的動態(tài)庫默認加載路徑是 /usr/local/lib, 如果希望把庫打包到app里并發(fā)布到appstore給其他人使用,這個加載路徑就必須改枫绅,使用 install_name_tool 工具可以達到目的:

#!/bin/sh

# change libavdevide.dylib
install_name_tool -change /usr/local/lib/libavfilter.7.dylib @loader_path/libavfilter.7.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libavformat.58.dylib @loader_path/libavformat.58.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libavcodec.58.dylib @loader_path/libavcodec.58.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libpostproc.55.dylib @loader_path/libpostproc.55.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libswresample.3.dylib @loader_path/libswresample.3.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libswscale.5.dylib @loader_path/libswscale.5.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libfreetype.6.dylib @loader_path/libfreetype.6.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libfontconfig.1.dylib @loader_path/libfontconfig.1.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib @loader_path/libSDL2.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libvorbisenc.2.dylib @loader_path/libvorbisenc.2.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libvorbis.0.dylib @loader_path/libvorbis.0.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libx264.157.dylib @loader_path/libx264.157.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @loader_path/libmp3lame.0.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libfdk-aac.2.dylib @loader_path/libfdk-aac.2.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libspeex.1.dylib @loader_path/libspeex.1.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libopus.0.dylib @loader_path/libopus.0.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/opt/libgsm/lib/libgsm.1.0.13.dylib @loader_path/libgsm.1.0.13.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libbluray.2.dylib @loader_path/libbluray.2.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libass.9.dylib @loader_path/libass.9.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libtheoraenc.1.dylib @loader_path/libtheoraenc.1.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libtheoradec.1.dylib @loader_path/libtheoradec.1.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libopencore-amrwb.0.dylib @loader_path/libopencore-amrwb.0.dylib libavdevice.58.dylib
install_name_tool -change /usr/local/lib/libopencore-amrnb.0.dylib @loader_path/libopencore-amrnb.0.dylib libavdevice.58.dylib
install_name_tool -change @rpath/libsnappy.1.dylib @loader_path/libsnappy.1.dylib libavdevice.58.dylib

# change libavfilter.dylib
install_name_tool -change /usr/local/lib/libavformat.58.dylib @loader_path/libavformat.58.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libavcodec.58.dylib @loader_path/libavcodec.58.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libpostproc.55.dylib @loader_path/libpostproc.55.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libswresample.3.dylib @loader_path/libswresample.3.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libswscale.5.dylib @loader_path/libswscale.5.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libfreetype.6.dylib @loader_path/libfreetype.6.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libfontconfig.1.dylib @loader_path/libfontconfig.1.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib @loader_path/libSDL2.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libvorbisenc.2.dylib @loader_path/libvorbisenc.2.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libvorbis.0.dylib @loader_path/libvorbis.0.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libx264.157.dylib @loader_path/libx264.157.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @loader_path/libmp3lame.0.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libfdk-aac.2.dylib @loader_path/libfdk-aac.2.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libspeex.1.dylib @loader_path/libspeex.1.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libopus.0.dylib @loader_path/libopus.0.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/opt/libgsm/lib/libgsm.1.0.13.dylib @loader_path/libgsm.1.0.13.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libbluray.2.dylib @loader_path/libbluray.2.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libass.9.dylib @loader_path/libass.9.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libtheoraenc.1.dylib @loader_path/libtheoraenc.1.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libtheoradec.1.dylib @loader_path/libtheoradec.1.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libopencore-amrwb.0.dylib @loader_path/libopencore-amrwb.0.dylib libavfilter.7.dylib
install_name_tool -change /usr/local/lib/libopencore-amrnb.0.dylib @loader_path/libopencore-amrnb.0.dylib libavfilter.7.dylib
install_name_tool -change @rpath/libsnappy.1.dylib @loader_path/libsnappy.1.dylib libavfilter.7.dylib

# change libavcodec.dylib
install_name_tool -change /usr/local/lib/libavfilter.7.dylib @loader_path/libavfilter.7.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libavformat.58.dylib @loader_path/libavformat.58.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libavcodec.58.dylib
install_name_tool -change @rpath/libsnappy.1.dylib @loader_path/libsnappy.1.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libswresample.3.dylib @loader_path/libswresample.3.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libvorbisenc.2.dylib @loader_path/libvorbisenc.2.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libvorbis.0.dylib @loader_path/libvorbis.0.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libx264.157.dylib @loader_path/libx264.157.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @loader_path/libmp3lame.0.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libfdk-aac.2.dylib @loader_path/libfdk-aac.2.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libspeex.1.dylib @loader_path/libspeex.1.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libopus.0.dylib @loader_path/libopus.0.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/opt/libgsm/lib/libgsm.1.0.13.dylib @loader_path/libgsm.1.0.13.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libbluray.2.dylib @loader_path/libbluray.2.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libass.9.dylib @loader_path/libass.9.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libtheoraenc.1.dylib @loader_path/libtheoraenc.1.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libtheoradec.1.dylib @loader_path/libtheoradec.1.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libopencore-amrwb.0.dylib @loader_path/libopencore-amrwb.0.dylib libavcodec.58.dylib
install_name_tool -change /usr/local/lib/libopencore-amrnb.0.dylib @loader_path/libopencore-amrnb.0.dylib libavcodec.58.dylib

# change libavformat.58.dylib
install_name_tool -change /usr/local/lib/libavformat.58.dylib @loader_path/libavformat.58.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libavcodec.58.dylib @loader_path/libavcodec.58.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libpostproc.55.dylib @loader_path/libpostproc.55.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libswresample.3.dylib @loader_path/libswresample.3.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libvorbisenc.2.dylib @loader_path/libvorbisenc.2.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libvorbis.0.dylib @loader_path/libvorbis.0.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libx264.157.dylib @loader_path/libx264.157.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @loader_path/libmp3lame.0.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libfdk-aac.2.dylib @loader_path/libfdk-aac.2.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libspeex.1.dylib @loader_path/libspeex.1.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libopus.0.dylib @loader_path/libopus.0.dylib libavformat.58.dylib
install_name_tool -change /usr/local/opt/libgsm/lib/libgsm.1.0.13.dylib @loader_path/libgsm.1.0.13.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libbluray.2.dylib @loader_path/libbluray.2.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libass.9.dylib @loader_path/libass.9.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libtheoraenc.1.dylib @loader_path/libtheoraenc.1.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libtheoradec.1.dylib @loader_path/libtheoradec.1.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libopencore-amrwb.0.dylib @loader_path/libopencore-amrwb.0.dylib libavformat.58.dylib
install_name_tool -change /usr/local/lib/libopencore-amrnb.0.dylib @loader_path/libopencore-amrnb.0.dylib libavformat.58.dylib
install_name_tool -change @rpath/libsnappy.1.dylib @loader_path/libsnappy.1.dylib libavformat.58.dylib

# change libswscale.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libswscale.5.dylib

# change libpostproc.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libpostproc.55.dylib

# change libswresample.dylib
install_name_tool -change /usr/local/lib/libavutil.56.dylib @loader_path/libavutil.56.dylib libswresample.3.dylib

# libfontconfig
install_name_tool -change /usr/local/lib/libfreetype.6.dylib @loader_path/libfreetype.6.dylib libfontconfig.1.dylib

# bluray
install_name_tool -change /usr/local/lib/libfreetype.6.dylib @loader_path/libfreetype.6.dylib libbluray.2.dylib
install_name_tool -change /usr/local/lib/libfontconfig.1.dylib @loader_path/libfontconfig.1.dylib libbluray.2.dylib

# ass
install_name_tool -change /usr/local/lib/libfreetype.6.dylib @loader_path/libfreetype.6.dylib libass.9.dylib
install_name_tool -change /usr/local/lib/libfontconfig.1.dylib @loader_path/libfontconfig.1.dylib libass.9.dylib
install_name_tool -change /usr/local/lib/libfribidi.0.dylib @loader_path/libfribidi.0.dylib libass.9.dylib

# change libvorbisenc.dylib
install_name_tool -change /usr/local/lib/libvorbis.0.dylib @loader_path/libvorbis.0.dylib libvorbisenc.2.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libvorbisenc.2.dylib

# change libvorbis.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libvorbis.0.dylib

# change libtheoraenc.dylib
install_name_tool -change /usr/local/lib/libogg.0.dylib @loader_path/libogg.0.dylib libtheoraenc.1.dylib

# change id of some dylibs
install_name_tool -id @executable_path/libavdevice.58.dylib libavdevice.58.dylib
install_name_tool -id @executable_path/libavfilter.7.dylib libavfilter.7.dylib
install_name_tool -id @executable_path/libavcodec.58.dylib libavcodec.58.dylib
install_name_tool -id @executable_path/libavutil.56.dylib libavutil.56.dylib
install_name_tool -id @executable_path/libavformat.58.dylib libavformat.58.dylib
install_name_tool -id @executable_path/libswscale.5.dylib libswscale.5.dylib
install_name_tool -id @executable_path/libpostproc.55.dylib libpostproc.55.dylib
install_name_tool -id @executable_path/libswresample.3.dylib libswresample.3.dylib
install_name_tool -id @executable_path/libfdk-aac.2.dylib libfdk-aac.2.dylib
install_name_tool -id @executable_path/libmp3lame.0.dylib libmp3lame.0.dylib
install_name_tool -id @executable_path/libx264.157.dylib libx264.157.dylib
install_name_tool -id @executable_path/libxvidcore.4.dylib libxvidcore.4.dylib

install_name_tool -id @executable_path/libtheoradec.1.dylib libtheoradec.1.dylib
install_name_tool -id @executable_path/libtheoraenc.1.dylib libtheoraenc.1.dylib
install_name_tool -id @executable_path/libopus.0.dylib libopus.0.dylib
install_name_tool -id @executable_path/libspeex.1.dylib libspeex.1.dylib
install_name_tool -id @executable_path/libvorbis.0.dylib libvorbis.0.dylib
install_name_tool -id @executable_path/libvorbisenc.2.dylib libvorbisenc.2.dylib
install_name_tool -id @executable_path/libass.9.dylib libass.9.dylib

install_name_tool -id @executable_path/libsnappy.1.dylib libsnappy.1.dylib
install_name_tool -id @executable_path/libbluray.2.dylib libbluray.2.dylib
install_name_tool -id @executable_path/libfribidi.0.dylib libfribidi.0.dylib
install_name_tool -id @executable_path/libSDL2-2.0.0.dylib libSDL2.dylib

# freetype ogg amr
install_name_tool -id @executable_path/libfreetype.6.dylib libfreetype.6.dylib
install_name_tool -id @executable_path/libfontconfig.1.dylib libfontconfig.1.dylib
install_name_tool -id @executable_path/libgsm.1.0.13.dylib libgsm.1.0.13.dylib
install_name_tool -id @executable_path/libogg.0.dylib libogg.0.dylib
install_name_tool -id @executable_path/libopencore-amrnb.0.dylib libopencore-amrnb.0.dylib
install_name_tool -id @executable_path/libopencore-amrwb.0.dylib libopencore-amrwb.0.dylib

以上是針對所有動態(tài)庫的修改泉孩,可以保存到shell文件,一鍵執(zhí)行完成并淋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棵譬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子预伺,更是在濱河造成了極大的恐慌订咸,老刑警劉巖曼尊,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脏嚷,居然都是意外死亡骆撇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門父叙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神郊,“玉大人,你說我怎么就攤上這事趾唱∮咳椋” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵甜癞,是天一觀的道長夕晓。 經(jīng)常有香客問我,道長悠咱,這世上最難降的妖魔是什么蒸辆? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮析既,結(jié)果婚禮上躬贡,老公的妹妹穿的比我還像新娘。我一直安慰自己眼坏,他們只是感情好拂玻,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宰译,像睡著了一般纺讲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囤屹,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音逢渔,去河邊找鬼肋坚。 笑死,一個胖子當著我的面吹牛肃廓,可吹牛的內(nèi)容都是我干的智厌。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼盲赊,長吁一口氣:“原來是場噩夢啊……” “哼铣鹏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哀蘑,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤诚卸,失蹤者是張志新(化名)和其女友劉穎葵第,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合溺,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡卒密,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棠赛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哮奇。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖睛约,靈堂內(nèi)的尸體忽然破棺而出鼎俘,到底是詐尸還是另有隱情,我是刑警寧澤辩涝,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布贸伐,位于F島的核電站,受9級特大地震影響膀值,放射性物質(zhì)發(fā)生泄漏棍丐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一沧踏、第九天 我趴在偏房一處隱蔽的房頂上張望歌逢。 院中可真熱鬧,春花似錦翘狱、人聲如沸秘案。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阱高。三九已至,卻和暖如春茬缩,著一層夾襖步出監(jiān)牢的瞬間赤惊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工凰锡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留未舟,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓掂为,卻偏偏與公主長得像裕膀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勇哗,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 如果你擁有最高權(quán)限昼扛,如果你只管理一臺服務(wù)器,那么系統(tǒng)自帶的包管理工具就幫你解決了所有問題欲诺。但是真實世界沒有那么美好...
    xuzhougeng閱讀 10,378評論 4 30
  • 今天下午,當我展示我寫的瘦金體的時候斯稳,被人說成這個捺好丑海铆,被人吐槽,學會控筆有什么用挣惰,還不是寫的怎么丑卧斟。 當時我快...
    鷇音bird閱讀 231評論 0 0
  • 回顧: 個人成長: -給自己的資源做了個匯總。設(shè)定了理財學習計劃憎茂。 -理財 1.學習了財富自由之路的六個概念: ①...
    Rosy彩霞閱讀 421評論 0 0
  • 今天我在上班的時候接到石燕打來的電話珍语,問我后天愿不愿意為婦聯(lián)的三八活動做志愿者,我想都沒想就答應(yīng)了竖幔,感謝石燕提供的...
    張萬奎閱讀 109評論 0 0