cannot find -lgcc_s

  在64位centos6上编译32位的汇编程序,如果程序中使用了C库,比如printf。因为是编译32位的目标程序,所以使用gcc编译的时候需要加上-m32选项,但是如果编译的话会报错,以print.s程序为例子

 1 .code32
 2 .section .data
 3 output:
 4     .asciz "hello gas ‘%d‘"
 5
 6 .section .text
 7 .globl main
 8 main:
 9     pushl $4
10     pushl $output
11     call printf
12     addl $8, %esp
13
14     pushl $0
15     call exit

  使用gcc -g -m32 -o print print.s编译的时候,会报错:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.7/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: skipping incompatible /lib/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s

  从编译错误基本可以看出来是因为没有找到gcc_s,在没有找到gcc_s之前的错误意思是系统中有gcc_s lib库,不过不匹配! 通过查询之后发现是因为64位系统使用的是64位的gcc_s库,我们目标程序是32位的,所以需要32位的gcc_s,经过一番查找之后,在http://pkgs.org/centos-6/centos-i386/libgcc-4.4.7-11.el6.i686.rpm.html目录下找到了适合版本的gcc_s 32位库,然后使用rpm安装这个包。

  然后再编译程序,使用之前的指令,程序正常运行

时间: 2024-09-16 09:23:12

cannot find -lgcc_s的相关文章

/usr/bin/ld: cannot find -lgcc_s 问题解决小记

博客分类: Linux/Ubuntu 由于之前用wubi装的ubuntu并且只给了它10G的硬盘空间,随着学习的深入这种 配备已经无法满足我的需求了.今天索性把ubuntu从windows上"卸载了",划了20G -_-的空余空间准备安装ubuntu双系统.双系统的安装过程很顺利,但接下来Qtopia的编译就不是很顺利了.我根据前面编译Qtopia时做的记 录文档对源文件还有系统变量进行了若干修改,但是实际编译的过程却跳出了我之前没有遇到的问题. Linux代码 收藏代码 /usr/b

boost静态链接的问题 -lgcc_s

在使用gcc/g++ 编译程序时我们希望指向一些库是使用静态的链接方式. 另外的一些是动态的方式. 我以boost 为例. 如果我们要使用静态库则是这样的: # g++ main.cpp -lpthread /usr/lib64/libboost_thread.a /usr/lib64/libboost_system.a 静态库直接写路径. 动态前面加-l  这样也可以实现. 但有没有更好的办法呢. 有. 先参考个帖子:http://stackoverflow.com/questions/369

Mac: ld: library not found for -lgcc_s.10.4

Mac: ld: library not found for -lgcc_s.10.4 Checking for cc... ld: library not found for -lgcc_s.10.4 clang: error: linker command failed with exit code 1 (use -v to see invocation) Found the way to solve the problem cd /usr/local/lib sudo ln -s ../.

nodejs错误:ld: library not found for -lgcc_s.10.5 clang: error: linker command failed with exit code 1 (use -v to see invocation)

解决方案: $ cd /usr/local/lib $ sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.5.dylib 参考链接

GCC --verbose选项, -lpthread 和-pthread的区别

verbose的意思是冗长的,繁杂的.顾名思义,gcc --verbose 的意思就是打印出编译连接时的详细信息. 参考stackoverflow中的文章结合自己机器的信息给出分析(其实也就是翻译了一下..嘿嘿.  原址:http://stackoverflow.com/questions/13440549/gcc-verbose-mode-output-explanation) 首先给出整体信息: [email protected]:~/APUE3/Chapter11$ gcc printid

[小技巧] gcc 编译选项-###

原文译至:http://elinux.org/GCC_Tips 的一小部分. -###编译选项用于查看编译的过程 gcc -### <你的命令行的其他部分放在这里> 你运行的GCC其是一系列工具的集合.通过这个参数,gcc能生成(但并不执行)一系列的命令用于完成你输入的任务.你可以看到在gcc编译下面的细节,什么库会被使用?-mcpu设成什么值?都在输出的结果中. 你可以将输出定向到一个文件并执行这个文件里的命令来编译程序,这样你可以更好地了解gcc是如何调用汇编器和链接器的. Reading

编译原理 (预处理&gt;编译&gt;汇编&gt;链接)(转)

一般高级语言程序编译的过程:预处理.编译.汇编.链接.gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld.下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查.代码调试.汇编语言等. 1.预处理 预处理是C语言程序从源代码变成可执行程序的第一步,主要是C语言编译器对各种预处理命令进行处理,包括头文件的包含.宏定义的扩展.条件编译的选择等.打印出预处理之

【转】G++ 处理 /usr/bin/ld: cannot find -lc

原文网址:http://blog.sina.com.cn/s/blog_67bbb71101010tto.html 用g++编译C++程序时显示出:/usr/lib/ld: cannot find -lc/usr/lib/ld: cannot find -lgcc_s/usr/lib/ld: cannot find -lm/usr/lib/ld: cannot find -lgcc_s的错误.在网上看了很多中关于/usr/lib/ld: cannot find -lXXX的解法,但是大同小异,没

MinGW 使用 msvcr90.dll

MinGW 编译出来的程序总是使用 VC6 的 msvcrt.dll ,VC8,9,10有很多新的API(仅限于c runtime),想使用怎么办? 比如:boost 对 MinGW 最低要求就是 msvcrt 7.0   1.MinGW 系统默认情况 MinGW 根据宏 MSVCRT_VERSION 来选择 msvcr 版本,如果用户未指定则默认使用 VC7 的 API(bug, MinGW 默认链接的是 msvcrt.dll, 虽然与 msvcr70.dll 差别不是太大)   MinGW