我正试图在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
符号。
我试图通过向CFLAGS
和LDFLAGS
添加-fno-stack-protector
和-U_FORTIFY_SOURCE
来重建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
添加到CFLAGS
,CXXFLAGS
和LDFLAGS
然后执行make clean
和make
解决了问题:libopenh264.so不再嵌入符号__stack_chk_guard
。