<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘锦的空间 &#187; PHP扩展编译</title>
	<atom:link href="https://www.phppan.com/tag/php%e6%89%a9%e5%b1%95%e7%bc%96%e8%af%91/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 25 Apr 2026 00:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>PHP5.3版本编译扩展时出现:LNK2001: unresolved external symbol _ZVAL_ADDREF</title>
		<link>https://www.phppan.com/2010/10/php5-3-extension-lnk2001/</link>
		<comments>https://www.phppan.com/2010/10/php5-3-extension-lnk2001/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 00:55:48 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP扩展]]></category>
		<category><![CDATA[PHP扩展编译]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=1052</guid>
		<description><![CDATA[PHP5.3版本编译扩展时出现的问题 近，因要编译PHP扩展，本着最新最好的出发点，将PHP5.3的源码包下载 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>PHP5.3版本编译扩展时出现的问题<br />
近，因要编译PHP扩展，本着最新最好的出发点，将PHP5.3的源码包下载下来，并将扩展源码创建VS2008项目，在经历百般磨难后，终于不再出现语法错误，然而当满怀希望按下F7键后，发现出现了N多的LNK2001和LNK2019错误，其中error LNK2001巨多，在纠结了一个周末后，可能是感动上天，终于在GOOGLE中找到了答案。<br />
报错如下：<br />
error LNK2001: unresolved external symbol _ZVAL_ADDREF<br />
GOOGLE给的答案是php5.3以上版本更改了一些Zend API，而ZVAL_ADDREF刚好是其中的一个。<br />
如下为解决方案：<br />
假设我们的扩展为martin,则在php_martin.h或martin文件中，在include了相关php本身的头文件后添加如下 代码：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="c" style="font-family:monospace;">&nbsp;
<span style="color: #339933;">#if (PHP_MAJOR_VERSION == 5 &amp;&amp; PHP_MINOR_VERSION &gt;= 3) || (PHP_MAJOR_VERSION &gt;= 6)</span>
<span style="color: #339933;">#undef ZVAL_REFCOUNT</span>
<span style="color: #339933;">#undef ZVAL_ADDREF</span>
<span style="color: #339933;">#undef ZVAL_DELREF</span>
<span style="color: #339933;">#define ZVAL_REFCOUNT Z_REFCOUNT_P</span>
<span style="color: #339933;">#define ZVAL_ADDREF Z_ADDREF_P</span>
<span style="color: #339933;">#define ZVAL_DELREF Z_DELREF_P</span>
<span style="color: #339933;">#endif</span></pre></td></tr></table></div>

<p><strong>以上代码的作用是将新的宏以旧名重定义，以保持其可用性。</strong></p>
<p>【参考资料】</p>
<p>http://www.hightman.cn/bbs/showthread.php?tid=656</p>
<p>http://d.hatena.ne.jp/rsky/20071016/1192524940</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2010/10/php5-3-extension-lnk2001/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
