免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
31 [报告]
发表于 2010-08-12 19:38 |只看该作者
回复 30# kallytin

有人知道吗?

论坛徽章:
0
32 [报告]
发表于 2010-08-12 20:13 |只看该作者
回复 31# kallytin


  .........

论坛徽章:
0
33 [报告]
发表于 2010-08-12 20:19 |只看该作者
换一个lib库试试;

论坛徽章:
0
34 [报告]
发表于 2010-08-12 20:26 |只看该作者
换一个lib库试试;
bxfqing 发表于 2010-08-12 20:19


能否说得详细一些?换哪个库?如何换?

论坛徽章:
0
35 [报告]
发表于 2010-08-12 20:29 |只看该作者
本帖最后由 bxfqing 于 2010-08-12 20:31 编辑
能否说得详细一些?换哪个库?如何换?
kallytin 发表于 2010-08-12 20:26



    还在啊~~~~-_-
    我目前在公司,没有linux环境,说错勿怪
    sudo apt-get reinstall glibc
    更新你的libc库,我怀疑是ubuntu默认安装只有runtime 环境,没有开发环境。。。。

   尝试下不同版本的GCC

    我曾经在deb5下遇到类似问题gcc 4.3 编译内核,始终出现问题,切换到Gcc4.2就通过了

论坛徽章:
0
36 [报告]
发表于 2010-08-12 23:39 |只看该作者
提供的信息太少了

将你执行的命令,已经命令的输出贴出来,不要只贴最后一两行,多贴几行不会有害处的

如果你执行的是 gcc a.c -o a.out ,试试加 -v 参数,将执行的命令和输出贴出来,

论坛徽章:
0
37 [报告]
发表于 2010-08-13 02:39 |只看该作者
提供的信息太少了

将你执行的命令,已经命令的输出贴出来,不要只贴最后一两行,多贴几行不会有害处的
...
drangon 发表于 2010-08-12 23:39



下面我用了2个简单的程序进行调试,如下:


==================================================
1)test.c

#include <stdio.h>

int main()
{
        printf("hello world\n";

        return 1;
}
==================================================



==================================================
2)test_en.asm

extern main

global  _start


_start:

        jmp     main
==================================================

执行步骤如下:

第一步:        生成test.o(gcc -c test.c)
第二步:        生成test_en.o(nasm -f elf test_en.asm -o test_en.o)
第三步:        链接(ld test.o test_en.o -o test)



输出如下:
usr@1:~/test/tmp$ gcc -c test.c
usr@1:~/test/tmp$ nasm -f elf test_en.asm -o test_en.o
usr@1:~/test/tmp$ ld test.o test_en.o -o test
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048080
test.o: In function `main':
test.c.text+0x19): undefined reference to `puts'


另,gcc的版本如下:
usr@1:~/test/tmp$ gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with: ./configure --prefix=/usr1/gcc-4.3.2 --enable-threads=posix --disable-checking --enable--long-long --with-system-zlib --enable-languages=c,c++
Thread model: posix
gcc version 4.3.2 (GCC)


已经重装gcc,但还是不行.........

论坛徽章:
0
38 [报告]
发表于 2010-08-13 02:40 |只看该作者
还在啊~~~~-_-
    我目前在公司,没有linux环境,说错勿怪
    sudo apt-get reinstall glibc ...
bxfqing 发表于 2010-08-12 20:29


已重装gcc,但还是不行........

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

你又没说用ld来链接?导致大家只能乱猜
ld出错,关gcc毛事,你把大家引导到gcc上,大家只能往gcc上想,再重装100次gcc都没有。

问问题一定要给出原始信息,不要误导。

如果真的要用ld来链接,要加很多参数的,静态链接的话,还要加上其他c库依赖的库(例如libgcc等),还是动态链接方便,
不过动态链接是需要写明-dynamic-linker的。

ld test.o test_en.o -o test -lc -dynamic-linker /lib/ld-linux.so.2

这样程序能执行,但会core dump,因为只是jmp到main,没有调用exit


另外你说相同的程序在redhat上能够正常运行,非常好奇,能不能把编译运行结果的原始信息贴出来?
如果不是相同的程序,那又是在误导了。

论坛徽章:
0
40 [报告]
发表于 2010-08-13 08:50 |只看该作者
关注中……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP