免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: kallytin
打印 上一主题 下一主题

gcc静态库链接 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
51 [报告]
发表于 2010-08-13 16:35 |只看该作者
回复 1# kallytin


    把原来编译的命令 加  -v  看下详细过程。

    我昨天 也是  编译 找不找什么的。

     最后给 libm  加了个符号联接 就 一切 ok了

论坛徽章:
0
52 [报告]
发表于 2010-08-14 08:52 |只看该作者
可能压根就没装 libc-dev!

论坛徽章:
0
53 [报告]
发表于 2010-08-14 09:49 |只看该作者
去掉-static编译选项

论坛徽章:
0
54 [报告]
发表于 2010-08-14 20:47 |只看该作者

论坛徽章:
0
55 [报告]
发表于 2010-08-14 22:04 |只看该作者
首先,linux系统下面肯定都是有C库的。
C库可以分两种: 动态库和静态库

printf是C库的标准函数,你的系统里的库文件肯定是没有问题的,因为如果库文件不存在的话,那其他基本程序都运行不了的。

所以,你的问题应该出在2种可能上:
1,你开发环境的程序没有安装上。你说的那个发行版需要在安装完毕后额外的升级、安装程序;
2,你的链接命令差了参数。要知道redhat的安装环境把很多常用的参数都alias到命令里的。所以你用起来才那么方便,在这点上各个发行版的习惯是有所不同的。

论坛徽章:
0
56 [报告]
发表于 2010-08-15 00:37 |只看该作者
回复 37# kallytin


   你的那两段代码你想干嘛  
      第一段代码中有个c的main入口
     第二段代码有个汇编的_start入口
  你是链接器的话  你选那个

   我想你是想从汇编里跳到main吧   
  我写了段代码  不知道是不是你想要的

c代码:
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int asmfun();
  5
  6 asmfun();
  7
  8 int main()
  9 {
10     puts("AAAAAAAA\n");
11     return 0;
12 }   
~              
汇编代码:(哥用的是at&t语法)
.text
.globl asmfun
asmfun:
    jmp main
mylinux@mylinux-laptop:~/asm$ as asmfun.s -o asmfun.o
mylinux@mylinux-laptop:~/asm$ gcc test.c -c
mylinux@mylinux-laptop:~/asm$ gcc test.o asmfun.o -o test
mylinux@mylinux-laptop:~/asm$ ./test
AAAAAAAA

mylinux@mylinux-laptop:~/asm$

   好了   该睡了

论坛徽章:
0
57 [报告]
发表于 2010-08-16 18:13 |只看该作者
回复  kallytin


   你的那两段代码你想干嘛  
      第一段代码中有个c的main入口
     第二段代码 ...
land5280 发表于 2010-08-15 00:37


谢谢你的回复。

已可以运行(jmp main)。

但是现在有了些变化,我想带参数,即 ./a.out 目录/文件名(其中,目录/文件名是参数,a.out是编译出来的程序),也就是将shell里的“命令和参数”一并带到main里(char *argv[]).......

楼上,有什么高招?

论坛徽章:
0
58 [报告]
发表于 2010-08-16 21:58 |只看该作者
回复 57# kallytin


      这我就不知道了

   我只知道  程序名在esp+4  参数一的首地址在esp+8 参数二的首地址在esp+12

论坛徽章:
0
59 [报告]
发表于 2010-08-17 12:24 |只看该作者
回复 58# land5280


各位,还有什么点子没有?

论坛徽章:
0
60 [报告]
发表于 2010-08-17 12:55 |只看该作者
回复  kallytin


   你的那两段代码你想干嘛  
      第一段代码中有个c的main入口
     第二段代码 ...
land5280 发表于 2010-08-15 00:37



    你用gcc来链接,就会默认链接 crt.o 等文件,跟楼主需要的ld来链接是完全两回事,而且这个情况下,asmfun一点用都没有,除非你用命令行指定以这个函数作为程序入口
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP