mod_wsgi错误:ImportError:dlopen(/usr/local/lib/python3.6/sitepackages/cv2.so,2):找不到符号:_icon

2024-09-30 16:26:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在配置一个Python应用程序,它在MacOSx(elcapitan)系统上使用OpenCV和Apache(XAMPP)。而且,我正在使用mod_wsgi。mod_wsgi已经按照安装指南使用Python3.6和XAMPP的apache版本成功地(并且正确地)构建了。在

我以前用过一个Python应用程序(没有OpenCV)和Apache一起使用mod wsgi,它已经正常工作了。在

但是,我现在有另一个使用OpenCV的应用程序,我得到了以下错误(来自Apache的错误日志),对此我一无所知,而且我在互联网上也没有找到类似的东西:

[Tue Jul 18 12:12:53.547655 2017] [wsgi:error] [pid 19030] [remote ::1:51718]
import cv2
[Tue Jul 18 12:12:53.547686 2017] [wsgi:error] [pid 19030] [remote ::1:51718] 
ImportError: dlopen(/usr/local/lib/python3.6/site-packages/cv2.so, 2): Symbol not found: _iconv
[Tue Jul 18 12:12:53.547698 2017] [wsgi:error] [pid 19030] [remote ::1:51718]
Referenced from: /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling
[Tue Jul 18 12:12:53.547706 2017] [wsgi:error] [pid 19030] [remote ::1:51718]   Expected in: /Applications/XAMPP/xamppfiles/lib/libiconv.2.dylib
[Tue Jul 18 12:12:53.547713 2017] [wsgi:error] [pid 19030] [remote ::1:51718]  in /System/Library/PrivateFrameworks/LanguageModeling.framework/Versions/A/LanguageModeling

/usr/local/lib/python3.6/site packages/cv2的输出

^{pr2}$

Tags: mod应用程序wsgiremotelibapache错误error
2条回答

看起来在编译cv2的C扩展时,它假定libiconv库已经链接到Python可执行文件中,而不是仍然链接它本身。{Apache}没有嵌入到Apache函数库中,{cd1>中没有链接。在

作为一种解决方法,在任何VirtualHost定义之外,向Apache配置添加以下行。在

LoadFile /usr/lib/libiconv.dylib

问题的可能原因和解决方案:问题是由XAMPP产生的。XAMPP使用动态库(例如:libiconv.dylib文件, libtiff.dylib文件等)在Apache服务器启动时加载/链接。这些库可以在Applications/XAMPP/xampfiles/lib中找到。当然,这些库有特定的版本。在

其中一些库也存在于MacOS系统库中,可以在/usr/lib中找到。这些库的版本可能与XAMPP的不同。这会导致使用OpenCV时发生冲突,因为在构建OpenCV时(通过源代码或使用Brew命令),它将一些OpenCV本机动态库与系统库链接起来。在

现在,当使用XAMPP的apache服务器时,它以某种方式强制OpenCV不使用系统库,而是使用自己的动态库。而且,由于不同的版本,它会导致冲突,从而导致如下错误:Symbol not found: _iconv或{}。它使用XAMPP库(libiconv.dylib文件)而不是对应的MacOS库。在XAMPP的libiconv.dylib文件,此符号不存在,但它确实存在于MacOS中libiconv.dylib文件. 可以使用以下命令进行检查:

nm /usr/lib/libiconv.dylib | grep iconv
nm Applcations/XAMPP/xamppfiles/lib/libiconv.dylib | grep iconv

甚至,通过在Apache的配置文件中手动添加LoadFile /usr/lib/libiconv.dylib也不能像Grapham Dumpleton所建议的那样工作。在

因此,我没有使用XAMPP的apache,而是使用了MacOS的默认apache服务器。结果是正确的。我想这是因为MacOS的Apache使用了OpenCV也使用的系统库,所以不再存在冲突。在

注意:为了使用MacOS的apache服务器,您需要重新配置所有东西(PHP、MySQL服务器和phpMyAdmin)。按照this link进行配置。在

另外,您需要再次构建mod_wsgi,因为在XAMPP和默认MacOS中,Apache的版本很可能不同。在

相关问题 更多 >