링크 ux 컴 파일 c 프로그램 과 동적 링크 라 이브 러 리

링크 ux 에서 c 프로그램 과 동적 링크 라 이브 러 리 를 컴 파일 합 니 다.
1 동적 라 이브 러 리 h 파일 과 c 파일
1.1 h 파일: kaflog4c. h
/**
 * kaflog4c.h
 */
#include <stdio.h>
#include <stdlib.h>

void hello(const char *msg);

1.2 c 파일: kaflog4c. c
/**
 * kaflog4c.c
 */
#include "kaflog4c.h"

void hello(const char *msg)
{
    printf("Hello %s!
", msg); }

2. 컴 파일 은 동적 라 이브 러 리 와 정적 라 이브 러 리 를 만들어 야 합 니 다.
2.1 컴 파일 동적 라 이브 러 리: libkaflog4c. so
$ gcc -W -Wall -fPIC -ansi -pedantic -I. -c kaflog4c.c
$ gcc -shared kaflog4c.o -o libkaflog4c.so

2.2 정적 라 이브 러 리 컴 파일: libkaflog4c. a
$ ar r libkaflog4c.a kaflog4c.o

3 프로그램 파일
3.1 main.c
동적 라 이브 러 리 (libkaflog4c. so) 에 연 결 된 프로그램 과 정적 라 이브 러 리 (libkaflog4c. a) 를 만 드 는 프로그램 을 컴 파일 합 니 다.
/**
 * main.c
 */
#include "kaflog4c.h"

int main ()
{
    hello("cheungmine");
    return 0;
}

1) 동적 라 이브 러 리 libkaflog4c. so 에 연 결 된 테스트 프로그램 main:
$ gcc -W -Wall -ansi -pedantic -I. -c main.c
$ gcc main.o -o main ./libkaflog4c.so

#     
$ ldd ./main

#   
$ ./main

2) 정적 라 이브 러 리 libkaflog4c. a 에 연 결 된 테스트 프로그램 main:
$ gcc main.o -o main ./libkaflog4c.a
$ ldd ./main

#     libkaflog4c.a libkaflog4c.so         
$ ./main

3.2 main_dl.c
/**
 * main_dl.c
 */
#include "kaflog4c.h"

#include <dlfcn.h>

void dl_hello()
{
    void *dp;

    void (*fn_hello)(const char*);

    dp = dlopen("libkaflog4c.so", RTLD_LAZY);
    if (!dp) {
        printf("%s
", dlerror()); exit(1); } fn_hello = dlsym(dp, "hello"); if (!fn_hello) { printf("%s
", dlerror()); exit(1); } fn_hello("cheungmine: load library when running"); dlclose(dp); } int main() { dl_hello(); return 0; }

컴 파일 실행 시 동적 라 이브 러 리 libkaflog4c. so 를 동적 으로 불 러 옵 니 다.
(libkaflog4c. so 는 현재 디 렉 터 리 에 존재 합 니 다)
$ gcc -W -Wall -ansi -I. -c main_dl.c
$ gcc main_dl.o -o main_dl -ldl
$ ldd main_dl
$ ./main_dl

$ sudo mv ./libkaflog4c.so /usr/local/lib/
$ ./main_dl
libkaflog4c.so: cannot open shared object file: No such file or directory

$ sudo ldconfig
$ ./main_dl

좋은 웹페이지 즐겨찾기