我正在尝试在 CentOS6 上编译 libmemcached (1.0.7),并不断收到以下警告:
...
checking for event.h... no
configure: WARNING: Unable to find libevent
...
我手动编译了 libevent (2.0.19) 并使用以下配置行构建它:
OPTIONS="--prefix=/usr/local/_custom/app/libevent"
一切都编译并安装得很好,但我不知道如何让系统知道 lib 文件位于自定义/usr/local/_custom/app/libevent/lib
目录中。我偶然发现了一个文章并读到我可以通过向目录添加自定义文件来让系统了解自定义库路径/etc/ld.so.conf.d/
:
# /etc/ld.so.conf.d/customApp.conf
/usr/local/_custom/app/libevent/lib
然后我发出了ldconfig
命令,并能够libevent
通过发出以下命令来确认已包含该命令:
ldconfig -p | ack -i libevent
看到 libevent 现在已包含在 ldconfig 输出中,我想我可以编译 libmemcached 并满足上述警告。不幸的是,事实并非如此。所以我再次查看了输出ldconfig
并注意到这一点:
libevent_pthreads-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_pthreads-2.0.so.5
libevent_openssl-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_openssl-2.0.so.5
libevent_extra-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_extra-2.0.so.5
libevent_core-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent_core-2.0.so.5
libevent-2.0.so.5 (libc6,x86-64) => /usr/local/_custom/app/libevent/lib/libevent-2.0.so.5
没有对基本链接的引用,例如,我希望看到指向这些的链接(ls -la /usr/local/_custom/app/libevent/lib
):
libevent.so -> libevent-2.0.so.5.1.7
libevent_openssl.so -> libevent_openssl-2.0.so.5.1.7
libevent_core.so -> libevent_core-2.0.so.5.1.7
因此,要么我做错了什么,要么系统仍然不知道在哪里可以找到libevent.so
。
-- 更新 #1 --
我无法在没有警告通知的情况下编译 libmemcached,即使尝试使用以下配置命令进行编译:
./configure --prefix=/usr/local/_custom/app/libmemcached CFLAGS="-I/usr/local/_custom/app/libevent/include" LDFLAGS="-L/usr/local/_custom/app/libevent/lib"
我以为这肯定会起作用,因为我直接将 include 和 lib 目录传递给 configure 命令。但事实并非如此。
答案1
我遇到了同样的问题,正准备放弃 libmemcached 时,我注意到配置标志应该是
CPPFLAGS="-I/usr/local/_custom/app/libevent/include"
代替
CFLAGS="-I/usr/local/_custom/app/libevent/include"
答案2
抱歉,我的英语不好。我的操作系统:CentOS 6.3 mini without Desktop x86_64,我还没有 yum install libevent,我在不同的环境中多次遇到同样的问题这是我的 libevent 安装过程:
tar zxvf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20-stable
./configure --prefix=/usr/local/libevent
make
make install
在安装 libmemcached-1.0.10 之前我尝试过
./configure --prefix=/usr/local/libmemcached --with-lib-prefix=/usr/local/libevent --with-memcached=/usr/local/bin/
和
LIBEVENT_CPPFLAGS=/usr/local/libevent/include
LIBEVENT_LDFLAGS=/usr/local/libevent/lib
问题也发生了。然后我做了一些类似这样的链接:
ln -s /usr/local/libevent/include/* /usr/include/
ln -s /usr/local/libevent/lib/libevent* /usr/lib64/
完成了!我认为 libmemcached 定位 libevent.so 和 event.h 有一些硬代码。希望我的解决方案能帮到你。
答案3
我本来要建议libevent-devel
在系统上安装该软件包。这将提供您发布的错误中列出的头文件,但版本可能比您需要的版本旧(1.4.13-1)libmemcached
。
查看您的序列,我实际上建议删除源目录config.cache
中的文件libmemcached
,然后重新运行./configure
for libmemcached
。 这应该允许进程识别您对库搜索路径所做的更改。
答案4
好吧,我没有合适的答案,但我确实注意到当我在 CentOS 上刚刚编译的 tmux 告诉我
tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
我尝试了这个并且成功了:
LD_LIBRARY_PATH=/usr/local/lib tmux
我不确定设置系统的 LD_LIBRARY_PATH 的规范/标准方法是什么,但如果我将其放入 bashrc/zshrc 中,它本身似乎并不“可怕”。
编辑:啊,这里是一个答案,它阐明了如何告诉您的系统库位于何处。