이 글에서 공유한 내용은 PHP를 사용하여 so 라이브러리 파일의 코드를 호출하는 것입니다. 특정 참조 값이 있습니다. 필요한 친구는 이를 참조할 수 있습니다.
원작자 charlee, 원문 링크http:// tech.idv2.com/2007/07/06/use-local-so-in-php/
so 파일에 특정 함수가 컴파일되어 있는데 php를 통해 어떻게 호출하나요? 한 가지 방법은 php 모듈(php 확장)을 작성하고, php에서 모듈에 있는 함수를 호출한 다음 모듈을 사용하여 에 있는 함수를 호출하는 것입니다. 다음은 Fedora Core 6을 운영 체제로 사용하는 간단한 예입니다.
먼저 간단한 so 파일을 만듭니다:
1 /** 2 * hello.c 3 * To compile, use following commands: 4 * gcc -O -c -fPIC -o hello.o hello.c 5 * gcc -shared -o libhello.so hello.o 6 */ 7 8 int hello_add(int a, int b) 9 { 10 return a + b; 11 }
그런 다음 .so 파일로 컴파일하고 시스템에 넣습니다:
1 ___FCKpd___1nbsp;gcc -O -c -fPIC -o hello.o hello.c 2 ___FCKpd___1nbsp;gcc -shared -o libhello.so hello.o 3 ___FCKpd___1nbsp;su 4 # echo /usr/local/lib > /etc/ld.so.conf.d/local.conf 5 # cp libhello.so /usr/local/lib 6 # /sbin/ldconfig
정확성을 확인하기 위한 작은 프로그램 작성:
1/** 2 * hellotest.c 3 * To compile, use following commands: 4 * gcc -o hellotest -lhello hellotest.c 5 */ 6 #include <stdio.h> 7 int main() 8 { 9 int a = 3, b = 4; 10 printf("%d + %d = %d/n", a, b, hello_add(a,b)); 11 return 0; 12 }
컴파일 및 실행:
$ gcc -o hellotest -lhello hellotest.c $ ./hellotest 3 + 4 = 7
좋아, PHP 모듈을 만들어보자. 먼저 php-devel 패키지를 설치했는지 확인하세요. 그렇지 않은 경우 설치 CD에서 찾으세요. 그런 다음 PHP 소스 코드를 다운로드하십시오. 저는 압축이 풀린 php-5.2.3.tar.gz를 사용하고 있습니다.
$ tar xzvf php-5.2.3.tar.gz $ cd php-5.2.3/ext
그런 다음 다음 명령을 통해 hello라는 모듈을 만듭니다.
$ ./ext_skel --extname=hello
이 명령을 실행하면 모듈을 컴파일하는 데 어떤 명령을 사용해야 하는지 묻는 메시지가 표시됩니다. 안타깝게도 이는 모듈을 PHP에 통합하는 컴파일 방법입니다. 동적으로 로드 가능한 php_hello.so로 컴파일하려는 경우 방법이 더 간단합니다.
$ cd hello
먼저 config.m4 파일을 편집하고 16행과 18행의 주석을 제거합니다(주석 기호는 dnl입니다.)
1 16: PHP_ARG_ENABLE(hello, whether to enable hello support, 2 17: dnl Make sure that the comment is aligned: 3 18: [ --enable-hello Enable hello support])
그런 다음 phpize 프로그램을 실행하여 구성 스크립트를 생성합니다:
$ phpize
그런 다음 php_hello.h를 엽니다. PHP_FUNCTION(confirm_hello_compiled); 아래에 함수 선언을 추가합니다.
1PHP_FUNCTION(confirm_hello_compiled); /* For testing, remove later. */ 2 PHP_FUNCTION(hello_add);
hello.c를 열고 PHP_FE(confirm_hello_compiled, NULL) 아래에 다음 내용을 추가합니다.
<br/>
그런 다음 hello.c 끝에 hello_add 함수의 내용을 작성합니다.
1PHP_FUNCTION(hello_add) 2 { 3 long int a, b; 4 long int result; 5 6 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &a, &b) == FAILURE) { 7 return; 8 } 9 10 result = hello_add(a, b); 11 12 RETURN_LONG(result); 13 }
저장 및 종료, 컴파일 및 설치:
___FCKpd___12nbsp;./configure ___FCKpd___12nbsp;make LDFLAGS=-lhello ___FCKpd___12nbsp;su # cp modules/hello.so /usr/lib/php/modules
그런 다음 /var/www/html 아래에 다음 내용으로 hello.php 파일을 만듭니다. :
<?php dl("hello.so"); echo hello_add(3, 4); ?>
그런 다음 브라우저에서 hello.php 파일을 엽니다. 7이 표시되면 함수 호출이 성공한 것입니다.
리눅스 지식보충:
에디트플러스를 사용하다보니 기본 C언어 소스프로그램이 .cpp로 저장되어 있다가 cygwin에서 gcc로 컴파일하다보니 항상 일부 기능이 선언되지 않은 상태로 나오네요. 표준 시스템에 전화하세요. 왜요?
저는 이 문제 때문에 오후와 밤 내내 우울했습니다. 나중에 왜 소스 프로그램 .cpp를 .c로 변경하라는 요청을 받았는지 알 수 없었고 컴파일은 순조롭게 진행되었습니다.
나중에 나는 Linux에서 gcc가 .c 파일을 컴파일하는 데 사용되는 반면, C++ 파일은 c++ 소스 프로그램을 컴파일하려면 g++ 명령이 필요하다는 것을 인터넷에서 배웠습니다.
관련 권장사항:
PHP를 사용하여 방문자 IP, 지역 위치, 브라우저 및 소스 페이지 정보 얻기
PHPstorm을 사용한 PHP의 자동 프롬프트 기능에 대한 자세한 설명
위 내용은 PHP를 사용하여 so 라이브러리 파일의 코드를 호출합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!