我正在编写的扩展是特定库的包装器。在Linux上,我的扩展程序通过cli和apache都能很好地工作,但在Windows上它只在cli中工作。 Apache给了我一个错误:
PHP警告:PHP启动:无法加载动态库'C:\ php \ eps_api.dll' - 找不到指定的模块。\ r \ n在第0行的未知中
我确定指定的dll在那里。
当我编译没有任何外部依赖项的简单扩展时,它可以工作,但是当我使用外部DLL的函数时,它会失败。外部dll在PATH中,我再说一遍,php-cli运行良好。
然后我尝试在RINIT中使用LoadLibrary()函数,但它也在apache中失败并出现错误126(无法找到模块)并在cli中工作。
我的扩展使用MSVC9编译,外部库使用MinGW 4.6.2编译,我猜这是麻烦。 .a导出表使用CMake函数GNUtoMS转换为.lib。 Apache 2.2.26版,Windows XP SP3。
任何想法如何使它工作?有关您的请求的配置,日志或技术信息。
P.S。抱歉我的英语不好。
编辑:我编写了测试脚本,打印了PATH变量,apache返回的结果与cmd给出的结果有很大不同。 所以问题是如何在apache中更改PATH?我搜索了注册表中的条目,尝试在httpd.conf中使用SetEnv指令,但没有结果。
编辑2:重启虚拟机并更新系统路径时问题已解决。
答案 0 :(得分:0)
在Windows上,该特定错误消息可能意味着找不到指定模块的依赖关系。 Grab" depends.exe"并确保Apache的PATH具有所有必需的传递依赖性。