PHP的C扩展怎么调用第三方库
PHP的C扩展如何调用第三方库
由于本人是写C的所以对这个事情不是很了解,首先说明一下是程序在linux下,php的版本是5.3.13,我用C写的一个简单的加法运算的php扩展是可以使用的,我想问题就出在没有正确的链接进C的库
C库为两种类型:
1.是linux系统本身就自带的,但是需要在gcc编译可执行文件的时候用-l去链接,比如C的线程库 -lpthread
2.是第三方的,比如我现在有一个C的.so动态链接库libdecode.so,提供了一个C的API函数long SetCode(long l_input);
我改写的供php调用的函数是这么写的
- C/C++ code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> PHP_FUNCTION(php_setcode) { long arg_1 = 0; long re = 0; if(zend_parse_parameter(ZEND_NUM_ARGS() TSRMLS_CC, "l", &arg_1) == FAILURE) { return; } re = SetCode(arg_1); }
config.m4里添加了
PHP_ADD_LIBRARY_WITH_PATH(decode, /home/wzb/lib, TEST_SHARED_LIBADD)
PHP_ADD_INCLUDE(/home/wzb/include)
执行命令
./congfigure --with-php-config=/usr/local/php/bin/php-config
make
并把生成的test.so和C的第三方库libdecode.so都复制到了/usr/local/php/lib/php/extension/no-debug-non-zts-20090626下
现在我在php.ini已经添加了如下的语句
extension=test.so
extension=libdecode.so
最后在php里无法成功调用php_setcode的函数
请教上述步骤我哪里需要补充才能实现对php_setcode的调用
------解决方案--------------------
你想实现c处理功能还是就是想让php调用自定义函数,若是后者为啥不做成php扩展呢
若是前者:http://blog.csdn.net/franzhong/article/details/7265429
------解决方案--------------------
咱不懂, 网上找个教程折腾折腾吧, 从原理角度, php得包含头文件, 执行时得dl系列动态加载动态库内的接口, 你需要告诉php有哪些接口是你动态库暴漏出来的.
------解决方案--------------------
到你生成的自定义扩展的父目录下,应该是ext目录吧。看看其实扩展是怎么实现的,比如mysql
------解决方案--------------------
#清除
make clean
#添加模块ncdocxml
./configure --with-php-config=/usr/nc-home/php5/bin/php-config --enable-ncdocxml
#编译模块ncdocxml
make LDFLAGS=-lncdocxml
------解决方案--------------------
你说的那是静态加载,你只有 so 没有对应的 lib 文件和头文件。是不可能实现静态加载的
你需要的是动态加载,这当然是在c程序里完成的。比如 window 下的 BC 就有 LoadLibrary 函数来加载指定的 dll,当然没有头文件也还是很痛苦的
另外我们在 vb、vfp 中都一直通过动态加载操作系统的动态链接库来完成脚本语言不可能完成的工作
------解决方案--------------------
帮你找了这篇博文供参考 http://blog.csdn.net/offbye/article/details/6832536

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
