1.
centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件。
安装32位glibc库文件命令:
sudo yum install glibc-devel.i686(安装C库文件)
sudo dnf install glibc-devel.i686(fedora命令)
安装32位glibc++库文件命令
sudo yum install libstdc++-devel.i686
sudo dnf install libstdc++-devel.i686(fedora命令)
2.
在学习gcc静态库动态库编译的时候选用静态库编译时出错显示:/usr/lib/ld:cannot find -lc
百度:/usr/lib/ld:cannot find -lc多处给的解决方案为:
然而并不能解决问题,最终定位发现是静态编译的问题。而且不止会出现这种情况:
/usr/lib/ld:cannot find -lc
/usr/lib/ld:cannot find -lgcc_s
/usr/lib/ld:cannot find -lm
等的错误,主要原因在静态编译时需要链接静调库。如上命令:
[xiaohexiansheng@centos6 app]$ gcc -static -I./libs main.c -o app -L./libs -lcrypto -lfunc
如果在编译时去掉-static选项选用动态库编译则不会出现此种情况
[xiaohexiansheng@centos6 app]$ gcc -I./libs main.c -o app -L./libs -lcrypto -lfunc [xiaohexiansheng@centos6 app]$ ls app libs main.c
非静态编译时ldd filename,显示如下,这是可执行程序所需的动态库,运行可执行程序时需要的动态库。
[xiaohexiansheng@centos6 app]$ ldd app linux-gate.so.1 => (0x004ad000) libcrypto.so => /usr/lib/libcrypto.so (0x03ad9000) libfunc.so => not found libc.so.6 => /lib/libc.so.6 (0x0052a000) libdl.so.2 => /lib/libdl.so.2 (0x0070c000) libz.so.1 => /lib/libz.so.1 (0x00713000) /lib/ld-linux.so.2 (0x00508000)
静态编译时需要将所有的.a库链接到可执行文件中,所以需要libc静态库文件,在系统找查找glibc-static提示没有库文件。
#yum install glibc-static安装静态库。
3.
[tian@lixixi demo]$ gcc -m32 str.c -o app /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.8.5/libgcc_s.so when s earching for -lgcc_s/usr/bin/ld: cannot find -lgcc_s collect2: error: ld returned 1 exit status
这个是由于没有32位的对应安装包
[tian@lixixi demo]$ yum search libgcc Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile =================================== N/S matched: libgcc ==================================== libgcc.i686 : GCC version 4.8 shared support library libgcc.x86_64 : GCC version 4.8 shared support library
Name and summary matches only, use “search all” for everything.
我这个错误执行以下命令即可: [root@lixixi ~]# yum install libgcc.i686