当前位置: 技术问答>linux和unix
makefile中,程序分成两段编译时,出现Undefined symbol 的问题
来源: 互联网 发布时间:2016-06-05
本文导语: 有一段程序,其中共有20个源文件,本来20个文件每次编译到一个分区,能够正常工作。 现在,要求把其中5个文件单独拿出来编译到另一个段,即:15个文件编到一个段,5个文件在另一个段,结果出现...
有一段程序,其中共有20个源文件,本来20个文件每次编译到一个分区,能够正常工作。
现在,要求把其中5个文件单独拿出来编译到另一个段,即:15个文件编到一个段,5个文件在另一个段,结果出现了:
ERROR : Undefined symbol _Recv_From
ERROR : Undefined symbol _Create_Event_Group
ERROR : Undefined symbol _Allocate_Memory
ERROR : Undefined symbol _Set_Events ....................................
本来在makefile中,写成一段时采用如下方式:
project.sun : $(CORE_SRC:.c=.o) $(USER_C:.c=.o) --------2部分代码
$(LD) -r -X -Tdata 0 -Ttext -$(SEG_OFFSET)
$(CORE_SRC:.c=.o) $(USER_C:.c=.o) -o $@
现在,分成两段,改成如下方式:
core.sun : $(CORE_SRC:.c=.o) ---------------1部分
$(LD) -r -X -Tdata 0 -Ttext -$(SEG_OFFSET)
$(CORE_SRC:.c=.o) -o $@
user.sun : $(USER_C:.c=.o) --------------另一部分
$(LD) -r -X -Tdata 0 -Ttext -$(SEG_OFFSET)
$(USER_C:.c=.o) -o $@
究其原因,我觉得,应该是 把USER_C:.c对应的5个源文件 分到另一段后,编译,就链接不到调用的CORE_SRC:.c对应的那些函数了。
尝试如下解决:
user.sun : $(USER_C:.c=.o)
$(LD) -r -X --just-symbols=core.sun -Tdata 0 -Ttext -$(SEG_OFFSET)
$(USER_C:.c=.o) -o $@
添加了:--just-symbols=core.sun ,其意义如下:
`-R FILENAME'
`--just-symbols=FILENAME'
从FILENAME中读取符号名跟它们的值,但不重位这个文件,或者根本不把它包含在输出文件中.这就允许你的输出文件引用其它程序中定义的绝对内存地址.你可以多次使用这个选项.
为了跟其他ELF连接器兼容,如果'-R'选项后面跟有一个目录名,而不是一个文件名,它会被处理成'-rpath'选项.
结果提示:
/usr/linuxbin/mipsx/ld: unrecognized option `-just-symbols=core.sun '
Usage: /usr/linuxbin/mipsx/ld [-a] [-d] [-dc] [-dp] [-e symbol] [-l lib] [-n]
[-noinhibit-exec] [-nostdlib] [-o file] [-r] [-s] [-t]
[-u symbol] [-x] [-y symbol] [-z] [-A file] [-Bstatic] [-D size]
[-L libdir] [-M] [-N] [-S] [-T[{text,data}] addr] [-V prefix] [-X]
[file...]
现在不知如何处理了,请指点。。。 多谢。
|
链接目标文件的时候出错?