xixitalk's snippet

Post Longer Than 140 Characters Tweets

May 7, 2018 - Comments

libgcc是什么

一个产品flash空间非常小,只有16MB,所以不必要的东西都要裁剪掉。一次有个研发问我:发现有个程序如果缺失libgcc_s.so.1,pthread_join()就会运行不正常,但是无论是ldd还是readelf -d都没有发现依赖libgcc_s.so.1。搜索得知PC linux上也大量类似libgcc_s.so.1 must be installed for pthread_cancel to work的问题。

libgcc是什么

这是gcc官方的解释,https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html ,这里有个中文版http://gccint.cding.org/Libgcc.html,最明显的看到了整型和浮点数的转换,而产品平台正好是软浮点

libgcc的静态库是libgcc.a,动态库是libgcc_s.so.1(libgcc_s.so指向libgcc_s.so.1)。

libgcc是GCC提供的一个低层运行时库,当一些操作/运算在特定平台上不支持时,GCC会自动生成对这些库函数的调用,使用这些库函数来模拟实现。从概念上和源码实现中,又可以分为libgcc1和libgcc2,虽然它们最终会被编译合并为libgcc.a。

From《libgcc1和libgcc2的区别》

是否需要libgcc_s.so.1

搜索到下面一个信息 https://wiki.osdev.org/Libgcc

All code compiled with GCC must be linked with libgcc.

结论

这种底层的库,还是加到文件系统比较安全。

参考资料

libgcc1和libgcc2的区别


知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。