使用带有Nginx 1.0.11和Passenger的PCRE 8.20

我下载并提取了nginx源文件到〜/ nginx-1.0.11,然后直接下载了PCRE 8.20,因为最新版本的Passenger安装程序无法自动下载。 我做了典型的./configure,make,sudo make install,默认把它放在/ usr / local / lib中。 到现在为止还挺好。 使用passenger-install-nginx-module并指定源目录为/home/username/nginx-1.0.11就行了。

当我用/ opt / nginx / sbin / nginx -t运行语法检查时,我被告知无法findlibpcre.so.0。 我对nginx运行了ldd,得到了以下结果:

linux-vdso.so.1 => (0x00007fff1dd7b000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fbfcde57000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x00007fbfcdc1e000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fbfcd909000) libm.so.6 => /lib/libm.so.6 (0x00007fbfcd686000) libpcre.so.0 => not found (truncated after this line) 

由于nginx能够在/ usr / lib中find文件,我用./configure –prefix = / usr重新编译了PCRE,现在一切正常。 我的问题是,是否有一个更聪明的方法来做到这一点。 我能否将PCRE安装在默认的/ usr / local位置,并以某种方式告诉系统或nginx在那里查找lib目录? 图书馆对我来说还是有点神秘的。

我可以想到几个select…

/etc/ld.so.conf中

您可以将/usr/local/lib添加到要search的库path的全局列表。 将其添加到/etc/ld.so.conf文件,然后运行ldconfig以更新caching。 就个人而言,由于其全球影响,我对这个select并不是很满意。

LD_LIBRARY_PATH

通过将/usr/local/libLD_LIBRARY_PATH环境variables中,系统应该能够在运行nginx时find它。 您可能不应该在您的shell环境中永久地设置它,因为它将对修改/etc/ld.so.conf具有类似的全局影响。 相反,你可以通过在你的nginx命令前添加一个特殊的方式来testing它:

 LD_LIBRARY_PATH=/usr/local/lib /opt/nginx/sbin/nginx -t 

您也可以在nginx的初始化脚本中设置variables。

选项来configure

nginx的configuration脚本似乎有一个标志,将允许您将额外的选项传递给ld 。 您可以尝试使用--with-ld-opt='-L/usr/local/lib'来运行nginx的configuration脚本。 我不确定这是否会在编译时修改库searchpath,或者是否会影响运行时间。 可能还有其他的链接器选项也可以做到这一点。 因为我不得不惹上这些东西,这已经有一段时间了。

configuration脚本也似乎有一个--with-pcre选项,用于将path传递给PCRE源,但似乎用于将库静态链接到nginx。 这可能不是一个好主意。

我build议使用--with-ld-opt='-L/usr/local/lib'来做一个nginx的testing版本(如果你想保持你原来的版本,可能在一个独立的build目录下)。 然后你可以用ldd在编译目录中检查编译好的二进制文件,就像以前做的那样,看看它是否有什么区别。