'undefined symbol: __stack_chk_guard' 在 libopenh264.so 使用 emcc 构建 FFmpeg 时

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

我正在尝试在 Ubuntu 18.04 上构建 codecbox.js,其中涉及使用 emcc 构建 FFmpeg。

在构建过程的某个阶段,FFmpeg 的 configure 脚本尝试处理以下代码:

#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;
}

我收到链接器错误:

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

这似乎与 Stack Smashing Protector 编译器功能有关。我试图用 nm 检查我的 libopenh264.so 文件,但 nm 告诉我 File format not recognized。但是,使用grep,我发现这个文件中有一个__stack_chk_guard符号。

我试图通过将 -fno-stack-protector-U_FORTIFY_SOURCE 添加到 CFLAGSLDFLAGS 来重建 libopenh264,但这并没有改变任何东西:

grep __stack_chk_guard libopenh264.so

仍然回答

Binary file libopenh264.so matches

然后我尝试通过向 emcc 添加相同的选项 -fno-stack-protector-U_FORTIFY_SOURCE 来构建上面显示的代码片段,但它也没有改变任何东西。

知道如何解决这个问题吗?

我还没有完全重建 libopenh264。

-fno-stack-protector-U_FORTIFY_SOURCE添加到CFLAGSCXXFLAGSLDFLAGS然后做make cleanmake 解决了问题:libopenh264.so不再嵌入符号[=​​17=].