免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 71423 | 回复: 10
打印 上一主题 下一主题

collect2: ld returned 1 exit status [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-07 17:45 |只看该作者 |倒序浏览
  1. /usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib64/crt1.o(.text+0x21): In function `_start':
  2. : undefined reference to `main'
  3. collect2: ld returned 1 exit status
  4. make[1]: *** [dso_vpd.so] Error 1
复制代码


是什么原因导致的,想从32bit改成64bit的机子上用,结果就出现这样的问题了,
只作了简单的"-m32"to"-m64".

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-06-07 18:46 |只看该作者
原帖由 lonelyair 于 2007-6-7 17:45 发表
[code]/usr/lib/gcc/x86_64-redhat-linux/3.4.3/../../../../lib64/crt1.o(.text+0x21): In function `_start':
: undefined reference to `main'
collect2: ld returned 1 exit status
make[1]: *** [dso_vpd ...

这个需要你提供更详细的信息。

论坛徽章:
0
3 [报告]
发表于 2007-06-07 19:14 |只看该作者
先排除编译器的问题

  1. /**
  2. * mode64.c
  3. */

  4. #include <stdio.h>
  5. #include <stdlib.h>

  6. int main()
  7. {
  8.     long value = 1234L;
  9.     printf("sizeof(value) is %ld\n", sizeof(value);
  10.     exit(EXIT_SUCCESS);
  11. }

  12. gcc -m64 -o mode64 mode64.c

  13. 然后将mode64.c拷贝成mode32.c
  14. gcc -m32 -o mode32 mode32.c

  15. 64位模式输出为8,32位模式输出为4,如果都正常的话,那你的编译环境就没有问题.

  16. dso_vpd.so,这个文件是什么?

  17. 感觉你好像要由没有定义main函数的源代码生成一个可执行文件.而链接时crt1.o找不到main函数的定义,所以连接出错.没有入口函数的代码仅能连接为so文件或者组织成.a文件.

  18. 用make -d检查一下详细过程.
复制代码

论坛徽章:
0
4 [报告]
发表于 2007-06-07 19:54 |只看该作者
原帖由 coldwarm 于 2007-6-7 19:14 发表
先排除编译器的问题
/**
* mode64.c
*/

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long value = 1234L;
    printf("sizeof(value) is %ld\n", size ...

谢LS的,编译器是没问题的,dso_vpd.c 我也只想是生成.so文件的,是没有main函数入口的

  1. gcc -I./AES -m64 -o dso_vpd.o -c dso_vpd.c
  2. gcc -o dso_vpd.so AES/libaes.a -lc -m64 -fPIC
复制代码

先生成.o再生成.so的.

[ 本帖最后由 lonelyair 于 2007-6-7 19:55 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2007-06-07 20:02 |只看该作者
原帖由 lonelyair 于 2007-6-7 19:54 发表

谢LS的,编译器是没问题的,dso_vpd.c 我也只想是生成.so文件的,是没有main函数入口的

  1. gcc -I./AES -m64 -o dso_vpd.o -c dso_vpd.c
  2. gcc -o dso_vpd.so AES/libaes.a -lc -m64 -fPIC
复制代码

先生成. ...

在生成动态库时增加参数 -shared

论坛徽章:
0
6 [报告]
发表于 2007-06-07 20:09 |只看该作者

  1. gcc  -fPIC -I./AES -m64 -c dso_vpd.c
  2. gcc -shared -o libdso_vpd.so AES/libaes.a -lc -m64 -fPIC
复制代码


编译为与位置无关的目标文件,链接为动态库.编译是指令的翻译,链接是目标文件的组合.
-fPIC指出编译为PIC的目标文件.
-shared指出连接为共享库.
info gcc看一下关于代码生成转换选项和链接的部分.

搜一下库文件生成的帖子吧.

论坛徽章:
0
7 [报告]
发表于 2007-06-08 09:15 |只看该作者
你这种情况应该是没找到64位的libc库。
一种是:gcc没有找对位置,使用gcc -v选项,看看他查找那个位置,然后将64位库复制过去。
第二种是:机器上没有64位库,需要你重新编译glibc

论坛徽章:
0
8 [报告]
发表于 2007-06-08 09:22 |只看该作者
LS几位正解,
一,确实没用-shared选项;
二,没有64位库,
现在解决了.

论坛徽章:
0
9 [报告]
发表于 2008-11-23 17:29 |只看该作者
原帖由 SuperZ 于 2007-6-8 09:15 发表
你这种情况应该是没找到64位的libc库。
一种是:gcc没有找对位置,使用gcc -v选项,看看他查找那个位置,然后将64位库复制过去。
第二种是:机器上没有64位库,需要你重新编译glibc


假如查找到是/usr/lib/gcc/x86_64-redhat-linux/3.4.6/specs,复制到哪里去?

论坛徽章:
0
10 [报告]
发表于 2010-11-26 13:51 |只看该作者
某些自定义函数在头文件中声明了,在实现文件却没有用到。。。本人遇见的就这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP