Hi Ali, On Tue, Feb 15, 2011 at 11:06:08AM +0330, ali hagigat wrote: > I am compiling my C programs with -nostdlib option without providing > mem functions like memcpy and GNU tool chain has not complained so > far(gcc 4.4.2, Fedora 12). Is that natural? I have defined char > pointers, nested functions and no error so far. I wonder if anybody > can write a simple C program and compile it with -nostdlib so that the > compiler needs one of mem functions and the compiler stops with an > error. try the program: int main(){ char *c = (char*) malloc(10*sizeof(char)); free(c); } On my machine (gcc-4.3.2), this compiles fine without the switch (just warning about the missing header file): ~> gcc nostdlib.c nostdlib.c: In function âmainâ: nostdlib.c:2: warning: incompatible implicit declaration of built-in function âmallocâ and with "-nostdlib", it gives the link error as expected: ~> gcc -nostdlib nostdlib.c nano-th2 ~ $ gcc -nostdlib nostdlib.c nostdlib.c: In function âmainâ: nostdlib.c:2: warning: incompatible implicit declaration of built-in function âmallocâ nostdlib.c:3: warning: incompatible implicit declaration of built-in function âfreeâ /usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8 /tmp/cckDrpxw.o: In function `main': nostdlib.c:(.text+0xe): undefined reference to `malloc' nostdlib.c:(.text+0x1b): undefined reference to `free' collect2: ld returned 1 exit status Adding "#include <stdlib.h>" does not solve the problem, just removes the warning. Axel > > > On 2/15/11, Patrick Horgan <phorgan1@xxxxxxxxx> wrote: > > On 02/07/2011 04:44 AM, ali hagigat wrote: > >> Thank you Manuel. > >> How will be memset, memcpy, etc. Can i copy them from the source code > >> of gcc? But they are dependent to other functions in other libraries > >> probably and some headers. > >> Are those functions available stand alone some where? > >> > >> > >> On Mon, Feb 7, 2011 at 2:51 PM, Manuel Coutinho > >>> Hi > >>> > >>> Other mechanism: supply your own memset, memcpy, etc. > >>> If you do this, the linker will know which memset, memcpy, etc to use and > >>> will not complaint about not using libc. > >>> > >>> Regards > >>> Manuel Coutinho > >>> > > you would just write your own copies of these methods. These are very > > simple functions any beginning computer science student could write in a > > few minutes. For example: > > > > void *memset(void *s, int c, size_t n) > > { > > size_t ctr; > > char *ptr=s; > > for(ctr=0;ctr<n;ctr++){ > > *(ptr+ctr)=(char)c; > > } > > return s; > > } > > > > > >