c프로그램을 so파일로 만들어야 하는데요
php 와 c프로그램이 서로 변수를 주고 받기위해서
c프로그램을 so파일로 만들어야 하는데요
소스파일은 foo.c인데요
foo.o만 단독으로
gcc -shared -o foo.so foo.o
위의 명령을 줘서 foo.so로 만들었습니다.
그리고 php.ini에 extension=foo.so를 해주고 아파치를 재시작했습니다.
그리고 dl(foo.so)를 test.php에 넣어서 쉘상에서
>php test.php 하니까요.
PHP Warning: Unknown(): Unable to load dynamic library './foo.so' - foo.so: undefined symbol: OpenDict in Unknown on line 0 라고 나오면서 멈추네요
foo.so를 php.ini에서 지정하는 디렉토리로 이동시켰구요. dl옵션도 on으로 했습니다.
OpenDict 가 정의가 안되어 있다고 나오는 것 같은데요...
아래는 makefile 이라는 파일에 나오는 실행파일 만드는 내용같습니다.
LDADD = libfoo.a -lgdbm
foo_SOURCES = foo.c
foo_OBJECTS = foo.o
foo_LDADD = $(LDADD)
foo_DEPENDENCIES = libfoo.a
foo_LDFLAGS =
LINK = gcc $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
foo: $(foo_OBJECTS) $(foo_DEPENDENCIES)
@rm -f foo
$(LINK) $(foo_LDFLAGS) $(foo_OBJECTS) $(foo_LDADD) $(LIBS)
foo.so를 에러없이 동작시킬려면 어떻게 컴파일 옵션을 줘야 하나요?
참고로 이 프로그램에는 foo.c 말고도 다른 c소스 파일도 여러개 있습니다.
공유라이브러리 컴파일을 원하시는 거죠?
공유 라이브러리 제작을 검색해 보시면 될껍니다.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/library_%B8%B8%B5%E9%B1%E2
여기 참조하시면 될 듯 하네요.
댓글 달기