ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>libsample



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 Sample °øÀ¯ ¶óÀ̺귯¸® »ý¼º ¹× ¼³Ä¡
2 ldconfig·Î °øÀ¯¶óÀ̺귯¸® °æ·Î ÁöÁ¤
2.1 ¶óÀ̺귯¸® ¸¸µé±â
2.2 °øÀ¯¶óÀ̺귯¸® ¼³Ä¡
2.3 ÄÄÆÄÀÏ
2.4 ½Ç Çà
3 ÀϹݰèÁ¤ÀÇ È¯°æº¯¼ö LD_LIBRARY_PATH¿¡ ÁöÁ¤
3.1 ¶óÀ̺귯¸® ¸¸µé±â
3.2 °øÀ¯¶óÀ̺귯 ÆÐ½º¼³Á¤
3.3 ÄÄÆÄÀÏ
3.4 ½ÇÇà
4 MakefileÀ» ÀÌ¿ë
4.1 root °èÁ¤¿ë Makefile
4.2 ÀÏ¹Ý °èÁ¤¿ë Makefile.usr
5 ¼Ò½ºÆÄÀÏ
5.1 samplelib.h
5.2 samplelib.c
5.3 sample.c
6 ÂüÁ¶»çÀÌÆ®


1 Sample °øÀ¯ ¶óÀ̺귯¸® »ý¼º ¹× ¼³Ä¡


ÀÛ¼ºÀÚ: mwyun(¸Û)

°£´ÜÇÑ Sample °øÀ¯ ¶óÀ̺귯¸® »ý¼º ¹× ¼³Ä¡ ¹× ÇÔ¼ö Æ÷ÀÎÅÍ È°¿ë ¿¹Á¦ÀÌ´Ù.

2 ldconfig·Î °øÀ¯¶óÀ̺귯¸® °æ·Î ÁöÁ¤


2.1 ¶óÀ̺귯¸® ¸¸µé±â


$ cd /home/mwyun/sample <= ÀÛ¾÷µð·ºÅ丮·Î À̵¿ 
$ gcc -fPIC -g -c -Wall samplelib.c 
$ gcc -shared -W1,-soname,libsample.so -o libsample.so samplelib.o 
 

2.2 °øÀ¯¶óÀ̺귯¸® ¼³Ä¡


$ su - <- root °èÁ¤À¸·Î Àüȯ 
$ install -m 744 libsample.so /usr/local/lib 
$ install -m 644 samplelib.h /usr/local/include 
 
$ vi /etc/ld.so.conf 
 /usr/local/lib <- Ãß°¡ 
 
$ ldconfig 
 

2.3 ÄÄÆÄÀÏ


$ gcc -o sample sample.c -lsample -L/usr/local/lib -I/usr/local/include 
$ samplelib.h ÆÄÀÏÀº /usr/local/include µð·ºÅ丮¿¡¼­ ã´Â´Ù. 
 

2.4 ½Ç Çà


$ ./sample 
call pcore->func(200) 
Hello, World!: 200 
call stest->func(100) 
Hello, World!: 100 
 

3 ÀϹݰèÁ¤ÀÇ È¯°æº¯¼ö LD_LIBRARY_PATH¿¡ ÁöÁ¤


3.1 ¶óÀ̺귯¸® ¸¸µé±â


$ cd /home/mwyun/sample <= ÀÛ¾÷µð·ºÅ丮·Î À̵¿ 
$ gcc -fPIC -g -c -Wall samplelib.c 
$ gcc -shared -W1,-soname,libsample.so -o libsample.so samplelib.o 
 

3.2 °øÀ¯¶óÀ̺귯 ÆÐ½º¼³Á¤


$ export "LD_LIBRARY_PATH=/home/mwyun/sample:$LD_LIBRARY_PATH" 
$ env 
... 
LD_LIBRARY_PATH=/home/mwyun/sample: <- µî·ÏÈ®ÀÎ 
 

¶Ç´Â .bash_profile¿¡¼­ Ãß°¡Çϰí source .bash_profile¸¦ ½ÇÇà½ÃŰ°Å³ª ·Î±×¾Æ¿ôÇÏ°í ´Ù½Ã ·Î±×ÀÎÇØµµ µÈ´Ù.

3.3 ÄÄÆÄÀÏ


$ gcc -o sample sample.c -lsample -L./ (-L/home/mwyun/sample) 
 
samplelib.h ÆÄÀÏÀº ÇöÀç µð·ºÅ丮¿¡¼­ ã´Â´Ù.

3.4 ½ÇÇà


$ ./sample 
call pcore->func(200) 
Hello, World!: 200 
call stest->func(100) 
Hello, World!: 100 
 

2°¡Áö ¹æ½Ä ¸ðµÎ Á¤»óÀûÀ¸·Î ½ÇÇàµÇ¾úÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

4 MakefileÀ» ÀÌ¿ë


4.1 root °èÁ¤¿ë Makefile


Makefile
CC = gcc 
CFLAGS = -fPIC -g -c -Wall 
TARGET = sample 
SRCS = sample.c 
OBJS= sample.o 
 
INCPATH = /usr/local/include 
LIBPATH = /usr/local/lib 
 
LIBS = libsample.so 
LIBNAME = sample 
LIBSRCS = samplelib.c 
LIBOBJS = samplelib.o 
 
all: $(LIBS) install $(TARGET)  
 
$(TARGET) : $(OBJS) 
    $(CC) -o $(TARGET) $(OBJS) -l$(LIBNAME) -L$(LIBPATH) 
 
$(OBJS) : $(SRCS) 
    $(CC) $(CFLAGS) $(SRCS) -I$(INCPATH) 
 
$(LIBS) : $(LIBOBJS) 
    $(CC) -shared -W1,-soname,$(LIBS) -o $(LIBS) $(LIBOBJS) 
     
$(LIBOBJS) : $(LIBSRCS) 
    $(CC) $(CFLAGS) $(LIBSRCS) 
# -l$(INCPATH) -I. 
     
clean: uninstall 
    rm -rf $(TARGET) $(OBJS) $(LIBS) $(LIBOBJS) core 
 
install: 
    install -c -m 744 $(LIBS) $(LIBPATH)  
    install -c -m 644 samplelib.h $(INCPATH)  
    echo "$(LIBPATH)" >> /etc/ld.so.conf  
    /sbin/ldconfig 
 
uninstall: 
    rm -f /usr/local/include/samplelib.h 
    rm -f /usr/local/lib/$(LIBS) 
 

$ Makefile libsample.so 
$ Makefile install 
$ Makefile sample 
 

¶Ç´Â ¹èÄ¡½ÇÇà: ÄÄÆÄÀÏ, ¼³Ä¡
$ make all 
 

»èÁ¦
$ make clean 
 

½ÇÇà
$ ./sample 
call pcore->func(200) 
Hello, World!: 200 
call stest->func(100) 
Hello, World!: 100 
 

4.2 ÀÏ¹Ý °èÁ¤¿ë Makefile.usr


Makefile.usr
CC = gcc 
CFLAGS = -fPIC -g -c -Wall 
TARGET = sample 
SRCS = sample.c 
OBJS= sample.o 
 
INCPATH = /home/mwyun/sample 
LIBPATH = /home/mwyun/sample 
 
LIBS = libsample.so 
LIBNAME = sample 
LIBSRCS = samplelib.c 
LIBOBJS = samplelib.o 
 
all: $(LIBS) $(TARGET)  
 
$(TARGET) : $(OBJS) 
    $(CC) -o $(TARGET) $(OBJS) -l$(LIBNAME) -L$(LIBPATH) 
 
$(OBJS) : $(SRCS) 
    $(CC) $(CFLAGS) $(SRCS) -I$(INCPATH) 
 
$(LIBS) : $(LIBOBJS) 
    $(CC) -shared -W1,-soname,$(LIBS) -o $(LIBS) $(LIBOBJS) 
     
$(LIBOBJS) : $(LIBSRCS) 
    $(CC) $(CFLAGS) $(LIBSRCS) 
     
clean:  
    rm -rf $(TARGET) $(OBJS) $(LIBS) $(LIBOBJS) core 
 

$ make -f Makefile.usr libsample.so 
$ make -f Makefile.usr install 
$ make -f Makefile.usr sample 
 

¶Ç´Â ¹èÄ¡½ÇÇà: ÄÄÆÄÀÏ, ¼³Ä¡

$ make -f Makefile.usr all 
 

»èÁ¦
$ make -f Makefile.usr clean 
 

½ÇÇà
$ ./sample 
./sample: error while loading shared libraries: libsample.so: cannot open shared object file: No such file or directory 
 

À§¿Í °°ÀÌ °øÀ¯ ¶óÀ̺귯¸®¸¦ ãÀ» ¼ö ¾ø´Ù°í ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
±×·¯¸é ´ÙÀ½°ú °°ÀÌ export¸¦ ÀÌ¿ëÇØ¼­ °øÀ¯ ¶óÀ̺귯¸® °æ·Î¸¦ ÁöÁ¤ÇØÁØ´Ù.

$ export "LD_LIBRARY_PATH=/home/mwyun/sample:$LD_LIBRARY_PATH" 
$ ./samplecall pcore->func(200) 
Hello, World!: 200 
call stest->func(100) 
Hello, World!: 100 
 

5 ¼Ò½ºÆÄÀÏ


5.1 samplelib.h

#ifndef __SAMPLELIB_H_ 
#define __SAMPLELIB_H_ 
 
struct core { 
    void (*func)(int id); 
}; 
 
void full(struct core *pcore, void (*pfunc)(int id)); 
 
#endif 
 

5.2 samplelib.c

#include "samplelib.h" 
#include <stdio.h> 
 
void full(struct core *pcore, void (*pfunc)(int id)) 
{ 
    pcore->func = pfunc; 
    printf("call pcore->func(%d)\n", 200); 
    pcore->func(200); 
} 
 

5.3 sample.c

#include "samplelib.h" 
#include <stdio.h> 
 
struct core stest; 
void test(int id); 
 
int main(int argc, char *argv[]) 
{ 
    full(&stest, test); // call full function 
 
    printf("call stest->func(%d)\n", 100); 
    stest.func(100); // call test function 
 
    return 0; 
} 
 
void test(int id) 
{ 
    printf("Hello, World!: %d\n", id); 
} 
 

6 ÂüÁ¶»çÀÌÆ®

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.