我正在尝试在我的 Ubuntu 16.10 笔记本电脑上安装 Clockwordmod Tether,以便于使用 USB 网络共享Google Play 上的相应应用。
我已经下载并解压了Tether tar 文件。安装说明非常简单。只需在终端中运行以下命令:
cd /home/username/Tether/node
./configure
make
但是当我运行的时候make
,它总是以这个错误结束:
../deps/v8/src/checks.h:251:22: warning: typedef ‘__StaticAssertTypedef__125’ locally defined but not used [-Wunused-local-typedefs]
SEMI_STATIC_JOIN(__StaticAssertTypedef__, __LINE__)
^
../deps/v8/src/checks.h:241:39: note: in definition of macro ‘SEMI_STATIC_JOIN_HELPER’
#define SEMI_STATIC_JOIN_HELPER(a, b) a##b
^
../deps/v8/src/checks.h:251:5: note: in expansion of macro ‘SEMI_STATIC_JOIN’
SEMI_STATIC_JOIN(__StaticAssertTypedef__, __LINE__)
^~~~~~~~~~~~~~~~
../deps/v8/src/checks.h:283:30: note: in expansion of macro ‘STATIC_CHECK’
#define STATIC_ASSERT(test) STATIC_CHECK(test)
^~~~~~~~~~~~
../deps/v8/src/v8utils.h:125:3: note: in expansion of macro ‘STATIC_ASSERT’
STATIC_ASSERT(sizeof(T) == kPointerSize);
^~~~~~~~~~~~~
In file included from ../deps/v8/src/elements.h:32:0,
from ../deps/v8/src/objects-inl.h:38,
from ../deps/v8/src/v8.h:60,
from ../deps/v8/src/accessors.cc:28:
../deps/v8/src/objects.h: At global scope:
../deps/v8/src/objects.h:5017:44: error: left operand of shift expression ‘(-1 << 3)’ is negative [-fpermissive]
static const int kElementsKindMask = (-1 << kElementsKindShift) &
~~~~^~~~~~~~~~~~~~~~~~~~~~
../deps/v8/src/objects.h:7152:36: error: left operand of shift expression ‘(-8 << 26)’ is negative [-fpermissive]
(~kMaxCachedArrayIndexLength << kArrayIndexHashLengthShift) |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
deps/v8/tools/gyp/v8_base.target.mk:209: recipe for target '/home/username/Tether/node/out/Release/obj.target/v8_base/deps/v8/src/accessors.o' failed
make[1]: *** [/home/username/Tether/node/out/Release/obj.target/v8_base/deps/v8/src/accessors.o] Error 1
make[1]: Leaving directory '/home/username/Tether/node/out'
Makefile:26: recipe for target 'node' failed
make: *** [node] Error 2
在网上查找,建议安装以下内容:
sudo apt-get install libssl-dev cmake g++ lib32ncurses5 nodejs-legacy
但这没有帮助。我还看到它可能与 Python 版本问题有关,但我找不到有关如何处理该问题的用户级说明。
有没有办法解决这个问题,并在我的 Ubuntu 笔记本电脑上安装 Tether?解决方案是否可以用对它一无所知的人configure
或make
能理解的人的术语来解释?
更新:
谢谢DropHammer99 的回答如下,看来我能够成功编译该程序。XXFLAGS=-fpermissive make
几分钟后命令结束如下:
LINK(target) /home/username/Tether/node/out/Release/node: Finished
touch /home/username/Tether/node/out/Release/obj.target/node_dtrace_header.stamp
touch /home/username/Tether/node/out/Release/obj.target/node_dtrace_provider.stamp
touch /home/username/Tether/node/out/Release/obj.target/node_dtrace_ustack.stamp
touch /home/username/Tether/node/out/Release/obj.target/node_etw.stamp
make[1]: Leaving directory '/home/username/Tether/node/out'
ln -fs out/Release/node node
但不幸的是,当我第一次按照文件中的指示运行该程序时README
,它崩溃了,出现以下错误:
~/Tether$ sudo linux/run.sh
[sudo] password for username:
~/Tether
Starting Tether...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
linux/run.sh: line 39: 21096 Segmentation fault (core dumped) $NODE/node tether.js
难道这个程序根本就无法运行,或者我能做些什么来解决这个分段错误?
答案1
该错误是 C++ 编译器抱怨一些可用但不太理想的代码。使用正确的命令行选项,您可以告诉编译器忽略此类代码问题并继续运行。这并不总是最好的解决方案,但它可以让程序编译并运行。
首先,运行make clean
以清除旧构建尝试留下的所有内容。
然后,运行CXXFLAGS=-fpermissive make
并再次尝试,C++ 编译器将这些代码问题降级为警告。
我能够在 64 位 16.10 安装上重现您的错误,并且此解决方法允许构建帮我解决该错误。
不幸的是,由于这个问题,构建似乎进一步失败:
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory '/home/username/work/Tether/node/out'
LD_LIBRARY_PATH=/home/username/work/Tether/node/out/Release/lib.host:/home/username/work/Tether/node/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../deps/v8/tools/gyp; mkdir -p /home/username/work/Tether/node/out/Release/obj.target/v8_snapshot/geni; "/home/username/work/Tether/node/out/Release/mksnapshot" --log-snapshot-positions --logfile "/home/username/work/Tether/node/out/Release/obj.target/v8_snapshot/geni/snapshot.log" "/home/username/work/Tether/node/out/Release/obj.target/v8_snapshot/geni/snapshot.cc"
Segmentation fault (core dumped)
deps/v8/tools/gyp/v8_snapshot.target.mk:13: recipe for target '/home/username/work/Tether/node/out/Release/obj.target/v8_snapshot/geni/snapshot.cc' failed
make[1]: *** [/home/username/work/Tether/node/out/Release/obj.target/v8_snapshot/geni/snapshot.cc] Error 139
make[1]: Leaving directory '/home/username/work/Tether/node/out'
Makefile:26: recipe for target 'node' failed
make: *** [node] Error 2
我仍在调查该问题。请尝试最初的解决方法,因为您的系统可能不会遇到我遇到的第二个问题。
更新:我能够通过告诉配置工具跳过快照步骤来避开第二个问题。不幸的是,我不知道快照步骤应该做什么,恐怕我只是将失败推迟到以后。如果您也想尝试第二种解决方法,请尝试以下命令序列:
make distclean
./configure --without-snapshot
CXXFLAGS=-fpermissive make
答案2
Clockwordmod Tether Linux 应用程序似乎已经过时,需要大量维护。我已根据上述答案编译了节点。但它给了
linux/run.sh: line 39: 25901 Segmentation fault $NODE/node tether.js
错误。当我检查它的节点版本时,我看到v0.8.14。这个版本太旧了,没有文档。当我编辑 run.sh 文件并让它使用我系统上安装的 nodejs (v4.8.2) 时,它失败了,消息如下:
[TypeError: os.setupTun is not a function]
作为 gnu/linux 用户,我们需要找到另一个替代应用程序的最新解决方案!
答案3
我现在已经有一个解决办法了。
spaces.cc
进入文件:node/deps/v8/src
- 转到函数:(
bool PagedSpace::AdvanceSweeper
大约第 2274 行) return true;
在方法的开头添加。
做:
make distclean
./configure --without-snapshot
CXXFLAGS=-fpermissive make
运行系绳:
sudo linux/run.sh
它已连接并且位于网络管理器中!
答案4
回复:Bob Dickens Jr/BobDCoder,2017 年 我不知道在哪里回答这个问题,所以我希望这是正确的地方。
我看到一些可以在构建错误中解释的错误,并希望对它们进行评论,因为我确信它会消除错误并可能进一步编译。
./run.sh:第 38 行:../linux/adb:没有此文件或目录该问题与 Tether/Linux 有关,您会发现一个 run.sh,其下方有一行cd../节点需要编辑的内容。查找../linux/adb并将此行更改为adb 启动服务器如果你安装了 ADB,或者/你的/路径/到/adb adb启动服务器如果您只是将 adb 复制并粘贴到 /usr/bin/adb 或其他目录中。
那应该可以消除../linux/adb错误
我正在使用 Ubuntu 16.04,我下载了上面提到的 rar 文件,然后运行
./configure && make
我成功地构建了,没有错误,这是我的为构建创建日志,在安装这些新软件包之后,您是否尝试过这样做make clean
?./configure && make
更新:
@提问者
这是我以 root 身份运行后的输出~/Documents/Tether/linux/run.sh
。
~/Documents/Tether/linux
Starting Tether...
./run.sh: line 38: ../linux/adb: No such file or directory
Opening tun device.
Opening tun device: /dev/net/tun
Forking worker.
Opening tun device.
adb binary path: "/home/username/Documents/Tether/linux/adb"
Checking phone status...
tun worker initialized.
{ [Error: Command failed: /bin/sh: 1:/home/username/Documents/Tether/linux/adb: not found
] killed: false, code: 127, signal: null }
Fatal error setting up TCP listener. (Exiting)
A possible cause may be that a "node.exe" processes was left dangling.
Please kill any node processes you find running.
This may also be cause by a firewall that disallows connections to Tether.
/home/username/Documents/Tether/node-tuntap/tuntap.js:558
exitTether();
^
ReferenceError: exitTether is not defined
at Server.<anonymous> (/home/username/Documents/Tether/node-tuntap/tuntap.js:558:7)
at Server.EventEmitter.emit (events.js:96:17)
at Server._listen2.self._handle.onconnection (net.js:894:14)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
TCP Catcher worker has died. Exiting.
{ '0': 1, '1': null }
我猜测 Tether 在这种情况下无法运行的原因可能是:
nodejs-legacy
未安装(从run.sh
第 39 行开始$NODE/node tether.js
):- 未安装 Android SDK(从
run.sh
第 38 行开始../linux/adb start-server
:)。
但我没有收到任何分段错误。我对 Nodejs 一无所知,您是否尝试过它node
作为独立命令正常工作?
看来您的命令已成功执行。第 39 行..adb/server start-server
似乎有问题。这里,文件是命令的第一个参数。我会尝试在终端上将其作为独立命令执行。$NODE/node tether.js
tether.js
node
node tether.js