基本上我只是想知道是否可以将libphp5.so文件拖放到没有PHP的另一台服务器上,并具有PHP的function以及静态编译的所有扩展。 (从源码编译一堆扩展)
我尝试使用这个文件上的ld工具(在我的服务器上),但它只是吐出一堆未定义的引用。 自从安装工作以来,这是无关紧要的。
编辑:
我现在意识到我正在使用ld而不是ldd 。 现在我得到一个依赖关系列表。 我猜我会需要所有这些文件正确? 所以我的问题是,如果我recursion获取所有的共享对象文件,并把它们放在目的地服务器上的相同位置(可能通过自定义的RPM),PHP会运行一个新的服务器,没有一个正式的PHP安装?
我可以错过ldd找不到的任何隐藏的依赖关系吗?
.so库是一个共享库 – 与静态库完全相反。 如果你静态编译一个PHP安装,你将会有一个可能被称为“php”的可执行文件,但是不会有.so文件。
我相信这是不可能的(或至less是一个非常糟糕的主意)“静态”编译.so文件。 原因是,你将有效地复制数百个,如果不是成千上万的函数到.so文件中,这不仅会使得它巨大,而且还会导致库加载时出错。 例如,如果一个应用程序(例如一个web服务器)加载了带有strcpy()函数的标准C库,那么它会加载你的“static”.so文件,该文件中还有一个strcpy()函数,是一个冲突。 你可以通过仔细导出必要的符号或者在应用程序中使用dlopen()来解决这个问题,但是最好的办法是最终会产生一个庞大的.so文件,浪费了大量的内存。
你可以做的是使用ldd挑出所有需要运行所有扩展名的.so文件,然后把它们全部放在与.so文件相同的文件夹中。 如果在运行应用程序之前将LD_LIBRARY_PATH环境variables设置为该目录,则应从该文件夹中选取PHP及其所有依赖项。 这不会给你神奇的单一文件的方法,但它至less可以让你把一切都包含在一个文件夹中。