Skip to content

Instantly share code, notes, and snippets.

View csukuangfj's full-sized avatar
I may be slow to respond.

Fangjun Kuang csukuangfj

I may be slow to respond.
  • Xiaomi Corporation
  • Peking
View GitHub Profile
csukuangfj / gist:24f04f881c61ff5a79d7b13d8f011cce
Created September 19, 2023 14:19 — forked from Jackarain/gist:ecc6594ef6930db7fa7f
Linking libstdc++ statically
View gist:24f04f881c61ff5a79d7b13d8f011cce
Linking libstdc++ statically
Christopher Baus writes about his problems linking libstdc++ statically. Yes, making C++ binaries that will work properly in different Linux distributions is somewhat painful. The problem is not so much linking libstdc++ statically – it is just a library, after all – but the runtime support required by C++ code in general, to enable features like RTTI and exception handling.
The runtime support code used by different parts of a C++ application needs to be compatible. If one part of the program needs to dynamic_cast or catch objects provided by another, both parts must agree on certain implementation details: how to find vtables, how to unwind the stack, and so on.
For C++ and a few other GCC-supported languages with similar features, such details are specified by a C++ ABI. Whenever the ABI used by GCC changes you'll end up with incompatible libraries produced by the different GCC versions. The same is true for plain C, but the C ABI is much simpler and has been around a lot lon
csukuangfj /
Created April 7, 2023 03:14 — forked from whizkydee/
using ffmpeg to extract audio from video files


Converting Audio into Different Formats / Sample Rates

Minimal example: transcode from MP3 to WMA:
ffmpeg -i input.mp3 output.wma

You can get the list of supported formats with:
ffmpeg -formats

Convert WAV to MP3, mix down to mono (use 1 audio channel), set bit rate to 64 kbps and sample rate to 22050 Hz:

#!/usr/bin/env python3
# Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
from import build_ctc_topo2
from speechbrain.pretrained import EncoderDecoderASR
import k2
import torch

Effective Modern CMake

Getting Started

For a brief user-level introduction to CMake, watch C++ Weekly, Episode 78, Intro to CMake by Jason Turner. LLVM’s CMake Primer provides a good high-level introduction to the CMake syntax. Go read it now.

After that, watch Mathieu Ropert’s CppCon 2017 talk Using Modern CMake Patterns to Enforce a Good Modular Design (slides). It provides a thorough explanation of what modern CMake is and why it is so much better than “old school” CMake. The modular design ideas in this talk are based on the book [Large-Scale C++ Software Design](

csukuangfj /
Created April 22, 2019 11:14
create wav file using c++
// author: fangjun kuang <csukuangfj at gmail dot com>
// date: Apr. 22, 2019
// refer to
#include <fstream>
#include <iostream>
typedef struct WAV_HEADER {
/* RIFF Chunk Descriptor */
csukuangfj / RNN-notes
Created March 8, 2019 02:10
View RNN-notes
- a blog article
csukuangfj /
Last active March 7, 2019 12:36
useful tensorflow statements
import tensorflow as tf
csukuangfj /
Last active February 28, 2019 03:25



  • protobuf for python