링크 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.