LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1168|回复: 1

(已解决)参照将livecd安装到硬盘的方法编译init.c出现的错误

[复制链接]
发表于 2007-5-22 15:30:21 | 显示全部楼层 |阅读模式
必须以livecd为编译环境才可以正常编译


参照 将livecd安装到硬盘的方法http://www.linuxsir.cn/bbs/showthread.php?t=274629   修改init.c,在未修改之前就有一些未定义变量名之类错误,修改之后,这应该是链接过程中的错误.



  1. debian:~# gcc init.c   -o init -static -Os -s -Wall
  2. init.c: In function ‘main’:
  3. init.c:87: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
  4. init.c: In function ‘mountlfscd’:
  5. init.c:184: warning: unused variable ‘correct_cd’
  6. init.c:182: warning: unused variable ‘pd’
  7. init.c:199: warning: ‘fd’ is used uninitialized in this function
  8. /tmp/ccR6B86p.o: In function `main':
  9. init.c:(.text+0x3bf): undefined reference to `dm_task_create'
  10. init.c:(.text+0x3ce): undefined reference to `dm_task_set_name'
  11. init.c:(.text+0x3db): undefined reference to `dm_task_set_major'
  12. init.c:(.text+0x3e5): undefined reference to `dm_task_set_minor'
  13. init.c:(.text+0x402): undefined reference to `dm_task_add_target'
  14. init.c:(.text+0x40b): undefined reference to `dm_task_run'
  15. init.c:(.text+0x413): undefined reference to `dm_task_destroy'
  16. collect2: ld returned 1 exit status
复制代码

在网上搜索有如下解释


链接器linker需要将虚函数表vtable 放入某个object file,但是linker无法找到正确的object文件。
这个错误常见于刚刚创建一系列有继承关系的class的时候,这个时候很容易忘了给base class的virtual function加上函数实现。

解决办法:给基类的virtual函数加上本来就应该有的function body。

小弟对C语言了解实在是很粗浅,不是很懂,另外也奇怪官方的源码编译居然也有错,是否是我的编译环境的问题?我的GCC版本是gcc version 4.1.3 20070429 (prerelease) (Debian 4.1.2-6)
 楼主| 发表于 2007-5-22 15:37:43 | 显示全部楼层

修改的目的

我并不是为了在硬盘上启动livecd而是打算将livecd作为一个DVD的部分,这个DVD还包含了其他几个系统的安装CD或者liveCD,我的目标是让他们能够互不影响地启动,目前正在尝试中
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表