ffmpegemscriptenwebassemblystack-smashopenh264

'undefined symbol: __stack_chk_guard' in libopenh264.so when building FFmpeg with emcc


I am trying to build codecbox.js on Ubuntu 18.04, which involves building FFmpeg with emcc.

At some stage of the build process, FFmpeg's configure script tries to process the following code:

#include <wels/codec_api.h>
#include <stdint.h>
long check_WelsGetCodecVersion(void) { return (long) WelsGetCodecVersion; }
int main(void) {
    int ret = 0;
    ret |= ((intptr_t)check_WelsGetCodecVersion) & 0xFFFF;
    return ret;
}

and I get a linker error:

wasm-ld: error: /.../codecbox.js/build/dist/lib/libopenh264.so: undefined symbol: __stack_chk_guard

It seems to be related to Stack Smashing Protector compiler feature. I tried to inspect my libopenh264.so file with nm but nm tells me File format not recognized. However, using grep, I found out that there was a __stack_chk_guard symbol in this file.

I tried to rebuild libopenh264 by adding -fno-stack-protector and -U_FORTIFY_SOURCE to the CFLAGS and the LDFLAGS but that did not change anything:

grep __stack_chk_guard libopenh264.so

still answers

Binary file libopenh264.so matches

I then tried to build the piece of code shown above by adding the same options -fno-stack-protector and -U_FORTIFY_SOURCE to emcc, but it did not change anything either.

Any idea how to get rid off the problem?


Solution

  • I had not rebuilt libopenh264 completely.

    Adding -fno-stack-protector and -U_FORTIFY_SOURCE to the CFLAGS, the CXXFLAGS and the LDFLAGS then doing make clean and make solved the problem: libopenh264.so no longer embedded symbol __stack_chk_guard.