watchman:加载共享库时出错:libpcre.so.1

时间:2016-04-02 14:53:37

标签: android node.js facebook react-native watchman

我正在使用Ubuntu 15.10,我正在使用react-native(0.20.0)开发Android(SDK 23)应用程序。我使用节点5.6.0和npm 3.6.0。

我在运行react-native start

时遇到了守望者错误
ERROR  watchman--no-pretty get-sockname returned with exit code 127 watchman: 
error while loading shared libraries: libpcre.so.1: cannot open shared object 
file: No such file or directory

    at ChildProcess.<anonymous> (/home/rachael/Dev/InstaGo/node_modules/fb-watchman/index.js:198:18)
    at emitTwo (events.js:100:13)
    at ChildProcess.emit (events.js:185:7)
    at maybeClose (internal/child_process.js:827:16)
    at Socket.<anonymous> (internal/child_process.js:319:11)
    at emitOne (events.js:90:13)
    at Socket.emit (events.js:182:7)
    at Pipe._onclose (net.js:471:12)

当我运行sudo find / -name libpcre.so.1时,会返回以下内容:

/home/rachael/.linuxbrew/lib/libpcre.so.1
/home/rachael/.linuxbrew/Cellar/pcre/8.38/lib/libpcre.so.1

我尝试重新安装守望者:

make uninstall

git clone https://github.com/facebook/watchman.git 
cd watchman 
git checkout v4.1.0 # the latest stable release .
/autogen.sh 
./configure 
make 
sudo make install

我也尝试过linuxbrew:

npm r -g watchman 
brew update && brew upgrade
brew install watchman

给出了完全不同的错误:

A non-recoverable condition has triggered.  Watchman needs your help!
The triggering condition was at timestamp=1407695600: inotify-add-watch(/my/path) -> Cannot allocate memory
All requests will continue to fail with this message until you resolve
the underlying problem.  You will find more information on fixing this at
https://facebook.github.io/watchman/docs/troubleshooting.html#poison-inotify-add-watch

Facebook的问题排查页面非常模糊,我无法解决该错误。

我对此非常陌生,所以我很感激这个问题的任何帮助。谢谢你的时间。

更新

通过linuxbrew安装watchman。

使用linuxbrew时,请记住在安装任何公式之前包含以下命令:

export PATH="$HOME/.linuxbrew/bin:$PATH"
export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"
export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"
brew update && brew upgrade

然后安装最新版本的守望者:

brew install --HEAD watchman

然后增加inotify用户实例,用户监视和排队事件的数量:

echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
echo fs.inotify.max_queued_events=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

现在守望者应该工作,react-native start应该运行良好!

2 个答案:

答案 0 :(得分:1)

您发布的第一个问题是与ldconfig相关的问题;由于pcre二进制文件未安装在系统库路径中,因此运行时链接程序无法在运行时解析它们,因此无法启动watchman二进制文件。

我无法帮助您直接解决问题的这一部分,但听起来您尝试的后续步骤会让您处于更好的位置。

请注意,当前发布的守望者版本是4.5.0;您所关注的路线已过时(您能否告诉我您在哪里找到这些路线?) https://facebook.github.io/watchman/docs/install.html始终拥有最新信息。

现在,到了毒药问题:

您看到的错误消息包含https://facebook.github.io/watchman/docs/troubleshooting.html#poison-inotify_add_watch的一个(遗漏,抱歉!)链接,其中包含对正在发生的事情的一些解释。

您需要阅读本节有关正确设置系统限制的内容: https://facebook.github.io/watchman/docs/install.html#system-specific-preparation

完成后,您可以通过运行watchman shutdown-server

来清除状态

这有帮助吗?我想了解你发现的哪些部分含糊不清,以便我可以为其他人改进它!

答案 1 :(得分:0)

关于完全不同的错误

你已经有守望者在跑,所以当你react-native start时,它会尝试开始另一个。

  1. 首先运行watchman shutdown-server
  2. 再次打开您的模拟器
  3. 在终端
  4. 中呼叫react-native start
  5. 在模拟器中打开您的应用。
  6. 一切都应该有效。它确实适合我。