ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 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À» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|