hightman/scws

windows下出现的扩展编译问题_solved

Closed this issue · 6 comments

Updated

根据@Timandes的提示,解决了编译的问题,具体做法如下:

1.搭建环境,我本机为VS2012+编译好的PHP5.5.35+php-sdk-binary-tools+deps-5.5-vc11-x64+zlib,需求是php5.5在windows x64系统下,线程安全模式的扩展;
2打开win32下的scws.sln,接受升级建议;
3配置管理器中,新建活动解决平台方案为X64,自win32复制设置,活动解决方案配置,新建PHP55,从Release_PHP54复制设置;
4修改scws项目属性->C\C++->常规的附加包含目录为编译好的php,main,zend和TSRM,链接器常规中选择附加库的目录为你本机的,输出文件目录及名称也可自定;
5.将libscws文件夹中的xdict.h编码改为ANSI(UTF-8也可),否则会出现一些未定义问题;
6.注释掉config_w32.h中关于logf的定义;此处为重复定义,此时libscws应可以编译;
7.scws项目属性->C\C++->预处理器,删除_USE_32BIT_TIME_T;此处如删除ZTS项,编译出来的应该是NTS版本;此时scws应可以编译;
8.编译libscws和scws项目,出现的warning并不影响最终结果。

感谢@hightman@Timandes,对于我这个几乎是零C基础的人,这是个不错的结果了。

您好!
以WIN10 x64+vs2012搭建的环境,为php5.5.35编译php_scws.dll扩展,nmake出现如下错误:
正在创建库 x64\Release_TS\php_scws.lib 和对象 x64\Release_TS\php_scws.exp
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_new,该符号在函数 _php_crate_scws 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_free,该符号在函数 php_scs_dtor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_add_dict,该符号在函数 _zal_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_set_dict,该符号在函数 _zal_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_set_charset,该符号在函数_zval_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_set_rule,该符号在函数 _zal_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_set_ignore,该符号在函数 zval_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_set_multi,该符号在函数 _val_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_set_duality,该符号在函数_zval_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_send_text,该符号在函数 _val_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_get_result,该符号在函数 zval_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_free_result,该符号在函数_zval_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_get_tops,该符号在函数 _zal_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_free_tops,该符号在函数 _val_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_get_words,该符号在函数 _val_copy_ctor 中被引用
php_scws.obj : error LNK2019: 无法解析的外部符号 scws_has_word,该符号在函数 _zal_copy_ctor 中被引用
x64\Release_TS\php_scws.dll : fatal error LNK1120: 16 个无法解析的外部命令
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 110\VC\BIN\amd64\cl.exe"”: 返回代码“0x2”
Stop.

不知问题出在何处,如能指教,不胜感激!

没有正确的引入scws库吧,亲。

scws的解决方案里有两个项目:

  • libscws会产生libscws.lib
  • scws会产生php_scws.dll

但是scws的附加依赖项里有libscws.lib(参看项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项)。

@Timandes
是的,正如您所说的,我的libscws.lib没有正确引入,如果我按照X64方案平台编译scws的话,会出现如下错误:
错误 9 error C2059: 语法错误:“(” C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\math.h 200 1 libscws

如果我按照win32平台编译,则可以生成libscws.lib,但尚未测试是否可生成php_scws.dll
以您的经验,能否给我个下一步进行的建议?谢谢!

@scnbpu 可否贴出更为详细的报错信息呢?
其实我也不是专家,可以贴出来看看其他人是否能帮助你。

PS:PHP7开始,Windows版才真正支持64位长整型。因此,你可以只考虑win32版。
PS2: 编译好之后求共享~

👍

@scnbpu 如若方便,可否将编译产出的DLL提交至项目 https://github.com/Timandes/php-scws-win32 呢?
不胜感激。