weixin_39842519
weixin_39842519
2020-11-28 11:07

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

Updated

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

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并不影响最终结果。

感谢,对于我这个几乎是零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.

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

该提问来源于开源项目:hightman/scws

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • weixin_39967120 weixin_39967120 4月前

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

    点赞 评论 复制链接分享
  • weixin_39967120 weixin_39967120 4月前

    scws的解决方案里有两个项目: - libscws会产生libscws.lib; - scws会产生php_scws.dll

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

    点赞 评论 复制链接分享
  • weixin_39842519 weixin_39842519 4月前

    是的,正如您所说的,我的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 以您的经验,能否给我个下一步进行的建议?谢谢!

    点赞 评论 复制链接分享
  • weixin_39967120 weixin_39967120 4月前

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

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

    点赞 评论 复制链接分享
  • weixin_39967120 weixin_39967120 4月前

    :+1:

    点赞 评论 复制链接分享
  • weixin_39967120 weixin_39967120 4月前

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

    点赞 评论 复制链接分享