|
|
必须以livecd为编译环境才可以正常编译
参照 将livecd安装到硬盘的方法http://www.linuxsir.cn/bbs/showthread.php?t=274629 修改init.c,在未修改之前就有一些未定义变量名之类错误,修改之后,这应该是链接过程中的错误.
- debian:~# gcc init.c -o init -static -Os -s -Wall
- init.c: In function ‘main’:
- init.c:87: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
- init.c: In function ‘mountlfscd’:
- init.c:184: warning: unused variable ‘correct_cd’
- init.c:182: warning: unused variable ‘pd’
- init.c:199: warning: ‘fd’ is used uninitialized in this function
- /tmp/ccR6B86p.o: In function `main':
- init.c:(.text+0x3bf): undefined reference to `dm_task_create'
- init.c:(.text+0x3ce): undefined reference to `dm_task_set_name'
- init.c:(.text+0x3db): undefined reference to `dm_task_set_major'
- init.c:(.text+0x3e5): undefined reference to `dm_task_set_minor'
- init.c:(.text+0x402): undefined reference to `dm_task_add_target'
- init.c:(.text+0x40b): undefined reference to `dm_task_run'
- init.c:(.text+0x413): undefined reference to `dm_task_destroy'
- 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) |
|