linux – 如果我从源代码静态编译PHP安装,使用一个公制的垃圾邮
基本上我只是想知道我是否可以将libphp5.so文件拖放到没有
PHP的另一台服务器上,并具有
PHP的功能和静态编译到其中的所有扩展. (源自一堆扩展的源代码编译)
我尝试在so文件(在我的服务器上)上使用ld工具,但它只是吐出一堆未定义的引用.这是因为它的工作安装无关紧要. 编辑: 我现在意识到我使用的是ld而不是ldd. 我可以错过任何ldd找不到的隐藏依赖项吗? 解决方法
.so库是一个共享库 – 与静态库完全相反.如果您静态编译PHP安装,您将拥有一个(非常大)可执行文件,可能称为“php”,但不会有.so文件.
我认为“静态地”编译.so文件是不可能的(或者至少是一个非常糟糕的主意).原因是您将有效地将数百个(如果不是数千个)函数复制到.so文件中,这不仅会使其变大,而且还会在加载库时导致错误.例如,如果一个应用程序(例如Web服务器)加载了标准C库,其中包含函数strcpy(),那么它会加载你的’static’.so文件,里面还有一个strcpy()函数,是一场冲突.你可以通过小心地只导出必要的符号或在应用程序中使用dlopen()来解决这个问题,但最多你会得到一个大量超大的.so文件,浪费了大量的内存. 你可以做的是使用ldd来挑选运行所有扩展所需的所有.so文件,然后将它们全部放在与.so文件相同的文件夹中.如果在运行应用程序之前将LD_LIBRARY_PATH环境变量设置为该目录,它应该从该文件夹中获取PHP及其所有依赖项.这不会给你神奇的单文件方法,但至少可以让你把所有内容都包含在一个文件夹中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |