diff options
author | 2024-05-25 10:52:52 +0800 | |
---|---|---|
committer | 2024-05-25 10:52:52 +0800 | |
commit | 911305a600e37a42acf69037b313912178c7010d (patch) | |
tree | bdcc1be89adff13fcd12ee33469281a2158c0b35 | |
parent | b128469110903d943de3ab8f55c0651c55cd88a0 (diff) | |
download | myweb-911305a600e37a42acf69037b313912178c7010d.tar.gz myweb-911305a600e37a42acf69037b313912178c7010d.zip |
Add LCM cross-compile.
lcm cross-compile method is now right, but missing glib2 while
compiling it. It should be solved next time.
-rw-r--r-- | code/ohos/lcm_compile.html | 119 | ||||
-rw-r--r-- | code/ohos/lcm_compile.md | 141 | ||||
-rw-r--r-- | code/ohos/ohos_compile.html | 63 | ||||
-rw-r--r-- | code/ohos/ohos_compile.md | 106 | ||||
-rw-r--r-- | common/html2js.c | 25 | ||||
-rw-r--r-- | common/script4works.html | 20 | ||||
-rw-r--r-- | common/script4works.js | 20 |
7 files changed, 424 insertions, 70 deletions
diff --git a/code/ohos/lcm_compile.html b/code/ohos/lcm_compile.html new file mode 100644 index 0000000..dbc8109 --- /dev/null +++ b/code/ohos/lcm_compile.html | |||
@@ -0,0 +1,119 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang=""> | ||
3 | |||
4 | <head> | ||
5 | <meta charset="utf-8" /> | ||
6 | <meta name="generator" content="pandoc" /> | ||
7 | <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> | ||
8 | <title>LCM 交叉编译</title> | ||
9 | <link rel="stylesheet" href="https://www.qin-juan-ge-zhu.top/common/CSS/pandoc.css"> | ||
10 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/js/myhighlight.js"></script> | ||
11 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/script4code.js"></script> | ||
12 | </head> | ||
13 | |||
14 | <body> | ||
15 | <div class="pandoc"> | ||
16 | <div class="main"> | ||
17 | <p class="title">LCM 交叉编译</p> | ||
18 | <!-- 编译集成lcm模块 --> | ||
19 | <h1 id="lcm-简介">LCM 简介</h1> | ||
20 | <p>LCM(Lightweight Communications and | ||
21 | Marshalling)是一种轻量级的通信和编组库,是一种针对高带宽、低延迟、实时性要求高的场景下的通讯工具,用于在多个进程之间传递消息。LCM 的设计目标是提供一种简单的方法来传递结构化数据,而不需要复杂的 | ||
22 | API 或协议定义。LCM 的消息传递是基于发布/订阅模型的,发布者和订阅者之间通过一个中心化的消息传递系统进行通信。</p> | ||
23 | <p>在机器人和自动驾驶系统中,LCM 可作为 ROS 的替代品,借以完成进程间、设备间的通讯。</p> | ||
24 | <p>为了方便地在不同进程、不同设备间传递数据,我们在 OHOS 系统中集成了 LCM 模块。</p> | ||
25 | <p>参考文档:</p> | ||
26 | <ul> | ||
27 | <li><a href="https://lcm-proj.github.io/">LCM 官方文档</a></li> | ||
28 | <li><a href="https://zhuanlan.zhihu.com/p/621943685">一篇博客</a></li> | ||
29 | </ul> | ||
30 | <h1 id="依赖项安装">依赖项安装</h1> | ||
31 | <pre><code>sudo apt update | ||
32 | sudo apt upgrade | ||
33 | sudo apt install build-essential cmake libglib2.0-dev | ||
34 | sudo apt install openjdk-8-jdk # lcm仅支持jdk8</code></pre> | ||
35 | <h1 id="x86-的-lcm">x86 的 lcm</h1> | ||
36 | <p>如果我们仅仅需要 x86 架构的 lcm,执行下列命令即可:</p> | ||
37 | <pre><code>git clone https://github.com/lcm-proj/lcm | ||
38 | cd lcm | ||
39 | mkdir build && cd build | ||
40 | cmake .. | ||
41 | make | ||
42 | sudo make install</code></pre> | ||
43 | <p>编译完成后,注意观察<kbd>build</kbd>目录下是否有<kbd>lcm-java</kbd>文件夹,如果没有,证明没有安装 java 或者 java 版本不对。</p> | ||
44 | <h2 id="lcm-python">lcm-python</h2> | ||
45 | <p>若想使用<kbd>lcm-python</kbd>,在<kbd>lcm/lcm-python</kbd>下执行<code>sudo python3 setup.py install</code>即可,使用时<code>import python</code>。 | ||
46 | </p> | ||
47 | <h2 id="lcm-spy-的使用">lcm-spy 的使用</h2> | ||
48 | <p>lcm-spy 是 LCM 配套的数据可视化工具。 可以通过 lcm-spy 监视 lcm 数据发送频率、数据量、数据结构,甚至实时画图。 如果安装了 JAVA,则 lcm-spy 会连同 LCM 一同被安装。 | ||
49 | </p> | ||
50 | <p>启动 lcm-spy:</p> | ||
51 | <pre><code>export CLASSPATH=${your lcm-type class path} | ||
52 | lcm-spy</code></pre> | ||
53 | <h1 id="交叉编译">交叉编译</h1> | ||
54 | <p>既然 lcm 用的是 cmake,何不交叉编译到 OHOS 里用呢?</p> | ||
55 | <p>首先,我们可以设置一下 Native Development Kit(NDK)的路径:</p> | ||
56 | <pre><code># 设置成自己的NDK工具目录 | ||
57 | export OHOS_ROOT=~/app/native</code></pre> | ||
58 | <pre><code>$OHOS_ROOT/build-tools/cmake/bin/cmake \ | ||
59 | -DOHOS_STL=c++_shared \ | ||
60 | -DOHOS_ARCH=armv8-a \ | ||
61 | -DOHOS_PLATFORM=OHOS \ | ||
62 | -DCMAKE_TOOLCHAIN_FILE=$(find $OHOS_ROOT -name "ohos.toolchain.cmake")</code></pre> | ||
63 | <p>不出意外的话,就要出意外了。果不其然,报错<kbd>Could NOT fid Glib2</kbd>。思考之后,我们认为,问题出现在 lcm 所依赖的 glib 库上:在 x86 | ||
64 | 架构上,我们直接向系统安装了<code>libglib2.0-dev</code>,而 lcm 编译时直接从系统里找到了这个库;但当交叉编译时,由于 OHOS 交叉编译工具未提供 | ||
65 | libglib2.0-dev,lcm 找遍了系统也没找到 arm 架构下的这个库,因而直接报错。</p> | ||
66 | <p>解决方案自然是自己手动交叉编译<code>libglib2.0-dev</code>。</p> | ||
67 | <h2 id="glib2.0-交叉编译">Glib2.0 交叉编译</h2> | ||
68 | <p>从<a href="https://download.gnome.org/sources/glib/">官网</a>下载 glib-2.79.2 源码,解压后进入源码目录。</p> | ||
69 | <pre><code>mkdir glib && cd glib | ||
70 | wget https://download.gnome.org/sources/glib/2.79/glib-2.79.2.tar.xz | ||
71 | tar -xvf glib-2.79.2.tar.xz | ||
72 | mkdir build</code></pre> | ||
73 | <p>这里需要注意的是:</p> | ||
74 | <ul> | ||
75 | <li>虽然 glib 编译需要<code>meson</code>,但它并不能直接交叉编译,OHOS 也并未提供用于交叉编译的<code>meson</code>。</li> | ||
76 | <li><code>meson</code>要求保证源码目录与构建目录不能相同,以保证构建过程的干净,因此我们在源码目录外新建了一个<code>build</code>目录。</li> | ||
77 | </ul> | ||
78 | <p>接着,参考博客<a | ||
79 | href="https://t.csdnimg.cn/YfSJC">这篇博客</a>,撰写如下<kbd>meson_ohos.txt</kbd>(友情提醒,使用该文件时把<kbd>native</kbd>也就是 | ||
80 | NDK 的路径修改为自己的路径、源平台与目标平台按需修改):</p> | ||
81 | <pre><code>[binaries] | ||
82 | c = '$OHOS_ROOT/llvm/bin/aarch64-unknown-linux-ohos-clang' | ||
83 | cpp = '$OHOS_ROOT/llvm/bin/aarch64-unknown-linux-ohos-clang++' | ||
84 | ar = '$OHOS_ROOT/llvm/bin/llvm-ar' | ||
85 | strip = '$OHOS_ROOT/llvm/bin/llvm-strip' | ||
86 | ld = '$OHOS_ROOT/llvm/bin/llvm-link' | ||
87 | |||
88 | [properties] | ||
89 | skip_sanity_check = true | ||
90 | sys_root = '$OHOS_ROOT/sysroot' | ||
91 | c_args = ['-L$OHOS_ROOT/sysroot/usr/lib/aarch64-linux-ohos'] | ||
92 | |||
93 | [host_machine] | ||
94 | system = 'linux' | ||
95 | cpu_family = 'aarch64' | ||
96 | cpu = 'aarch64' | ||
97 | endian = 'little' | ||
98 | |||
99 | [target_machine] | ||
100 | system = 'ohos' | ||
101 | cpu_family = 'aarch64' | ||
102 | cpu = 'armv8a' | ||
103 | endian = 'little'</code></pre> | ||
104 | <p>将该文件放置在<kbd>glib-2.79.2</kbd>源码目录下,而后在<kbd>build</kbd>目录下执行以下命令:</p> | ||
105 | <pre><code>meson --cross-file=../glib-2.79.2/meson_ohos.txt .. | ||
106 | ninja</code></pre> | ||
107 | <p>编译完成,正确地安装 glib2 到交叉编译工具链中(???),之后我们回到 lcm 的源码目录,重新执行 cmake 命令:</p> | ||
108 | <pre><code>$OHOS_ROOT/build-tools/cmake/bin/cmake \ | ||
109 | -DOHOS_STL=c++_shared \ | ||
110 | -DOHOS_ARCH=armv8-a \ | ||
111 | -DOHOS_PLATFORM=OHOS \ | ||
112 | -DCMAKE_TOOLCHAIN_FILE=$(find $OHOS_ROOT -name "ohos.toolchain.cmake")</code></pre> | ||
113 | <p>这次,编译成功了。万岁!</p> | ||
114 | <script src="https://www.qin-juan-ge-zhu.top/common/js/comment.js"></script> | ||
115 | </div> | ||
116 | </div> | ||
117 | </body> | ||
118 | |||
119 | </html> \ No newline at end of file | ||
diff --git a/code/ohos/lcm_compile.md b/code/ohos/lcm_compile.md new file mode 100644 index 0000000..8f34297 --- /dev/null +++ b/code/ohos/lcm_compile.md | |||
@@ -0,0 +1,141 @@ | |||
1 | <!-- 编译集成lcm模块 --> | ||
2 | |||
3 | # LCM 简介 | ||
4 | |||
5 | LCM(Lightweight Communications and Marshalling)是一种轻量级的通信和编组库,是一种针对高带宽、低延迟、实时性要求高的场景下的通讯工具,用于在多个进程之间传递消息。LCM 的设计目标是提供一种简单的方法来传递结构化数据,而不需要复杂的 API 或协议定义。LCM 的消息传递是基于发布/订阅模型的,发布者和订阅者之间通过一个中心化的消息传递系统进行通信。 | ||
6 | |||
7 | 在机器人和自动驾驶系统中,LCM 可作为 ROS 的替代品,借以完成进程间、设备间的通讯。 | ||
8 | |||
9 | 为了方便地在不同进程、不同设备间传递数据,我们在 OHOS 系统中集成了 LCM 模块。 | ||
10 | |||
11 | 参考文档: | ||
12 | |||
13 | - [LCM 官方文档](https://lcm-proj.github.io/) | ||
14 | - [一篇博客](https://zhuanlan.zhihu.com/p/621943685) | ||
15 | |||
16 | # 依赖项安装 | ||
17 | |||
18 | ```bash | ||
19 | sudo apt update | ||
20 | sudo apt upgrade | ||
21 | sudo apt install build-essential cmake libglib2.0-dev | ||
22 | sudo apt install openjdk-8-jdk # lcm仅支持jdk8 | ||
23 | ``` | ||
24 | |||
25 | # x86 的 lcm | ||
26 | |||
27 | 如果我们仅仅需要 x86 架构的 lcm,执行下列命令即可: | ||
28 | |||
29 | ```bash | ||
30 | git clone https://github.com/lcm-proj/lcm | ||
31 | cd lcm | ||
32 | mkdir build && cd build | ||
33 | cmake .. | ||
34 | make | ||
35 | sudo make install | ||
36 | ``` | ||
37 | |||
38 | 编译完成后,注意观察<kbd>build</kbd>目录下是否有<kbd>lcm-java</kbd>文件夹,如果没有,证明没有安装 java 或者 java 版本不对。 | ||
39 | |||
40 | ## lcm-python | ||
41 | |||
42 | 若想使用<kbd>lcm-python</kbd>,在<kbd>lcm/lcm-python</kbd>下执行`sudo python3 setup.py install`即可,使用时`import python`。 | ||
43 | |||
44 | ## lcm-spy 的使用 | ||
45 | |||
46 | lcm-spy 是 LCM 配套的数据可视化工具。 | ||
47 | 可以通过 lcm-spy 监视 lcm 数据发送频率、数据量、数据结构,甚至实时画图。 | ||
48 | 如果安装了 JAVA,则 lcm-spy 会连同 LCM 一同被安装。 | ||
49 | |||
50 | 启动 lcm-spy: | ||
51 | |||
52 | ```bash | ||
53 | export CLASSPATH=${your lcm-type class path} | ||
54 | lcm-spy | ||
55 | ``` | ||
56 | |||
57 | # 交叉编译 | ||
58 | |||
59 | 既然 lcm 用的是 cmake,何不交叉编译到 OHOS 里用呢? | ||
60 | |||
61 | 首先,我们可以设置一下 Native Development Kit(NDK)的路径: | ||
62 | |||
63 | ```bash | ||
64 | # 设置成自己的NDK工具目录 | ||
65 | export OHOS_ROOT=~/app/native | ||
66 | ``` | ||
67 | |||
68 | ```bash | ||
69 | $OHOS_ROOT/build-tools/cmake/bin/cmake \ | ||
70 | -DOHOS_STL=c++_shared \ | ||
71 | -DOHOS_ARCH=armv8-a \ | ||
72 | -DOHOS_PLATFORM=OHOS \ | ||
73 | -DCMAKE_TOOLCHAIN_FILE=$(find $OHOS_ROOT -name "ohos.toolchain.cmake") | ||
74 | ``` | ||
75 | |||
76 | 不出意外的话,就要出意外了。果不其然,报错<kbd>Could NOT fid Glib2</kbd>。思考之后,我们认为,问题出现在 lcm 所依赖的 glib 库上:在 x86 架构上,我们直接向系统安装了`libglib2.0-dev`,而 lcm 编译时直接从系统里找到了这个库;但当交叉编译时,由于 OHOS 交叉编译工具未提供 libglib2.0-dev,lcm 找遍了系统也没找到 arm 架构下的这个库,因而直接报错。 | ||
77 | |||
78 | 解决方案自然是自己手动交叉编译`libglib2.0-dev`。 | ||
79 | |||
80 | ## Glib2.0 交叉编译 | ||
81 | |||
82 | 从[官网](https://download.gnome.org/sources/glib/)下载 glib-2.79.2 源码,解压后进入源码目录。 | ||
83 | |||
84 | ```bash | ||
85 | mkdir glib && cd glib | ||
86 | wget https://download.gnome.org/sources/glib/2.79/glib-2.79.2.tar.xz | ||
87 | tar -xvf glib-2.79.2.tar.xz | ||
88 | mkdir build | ||
89 | ``` | ||
90 | |||
91 | 这里需要注意的是: | ||
92 | |||
93 | - 虽然 glib 编译需要`meson`,但它并不能直接交叉编译,OHOS 也并未提供用于交叉编译的`meson`。 | ||
94 | - `meson`要求保证源码目录与构建目录不能相同,以保证构建过程的干净,因此我们在源码目录外新建了一个`build`目录。 | ||
95 | |||
96 | 接着,参考博客[这篇博客](https://t.csdnimg.cn/YfSJC),撰写如下<kbd>meson_ohos.txt</kbd>(友情提醒,使用该文件时把<kbd>native</kbd>也就是 NDK 的路径修改为自己的路径、源平台与目标平台按需修改): | ||
97 | |||
98 | ```meson | ||
99 | [binaries] | ||
100 | c = '$OHOS_ROOT/llvm/bin/aarch64-unknown-linux-ohos-clang' | ||
101 | cpp = '$OHOS_ROOT/llvm/bin/aarch64-unknown-linux-ohos-clang++' | ||
102 | ar = '$OHOS_ROOT/llvm/bin/llvm-ar' | ||
103 | strip = '$OHOS_ROOT/llvm/bin/llvm-strip' | ||
104 | ld = '$OHOS_ROOT/llvm/bin/llvm-link' | ||
105 | |||
106 | [properties] | ||
107 | skip_sanity_check = true | ||
108 | sys_root = '$OHOS_ROOT/sysroot' | ||
109 | c_args = ['-L$OHOS_ROOT/sysroot/usr/lib/aarch64-linux-ohos'] | ||
110 | |||
111 | [host_machine] | ||
112 | system = 'linux' | ||
113 | cpu_family = 'aarch64' | ||
114 | cpu = 'aarch64' | ||
115 | endian = 'little' | ||
116 | |||
117 | [target_machine] | ||
118 | system = 'ohos' | ||
119 | cpu_family = 'aarch64' | ||
120 | cpu = 'armv8a' | ||
121 | endian = 'little' | ||
122 | ``` | ||
123 | |||
124 | 将该文件放置在<kbd>glib-2.79.2</kbd>源码目录下,而后在<kbd>build</kbd>目录下执行以下命令: | ||
125 | |||
126 | ```bash | ||
127 | meson --cross-file=../glib-2.79.2/meson_ohos.txt .. | ||
128 | ninja | ||
129 | ``` | ||
130 | |||
131 | 编译完成,正确地安装 glib2 到交叉编译工具链中(???),之后我们回到 lcm 的源码目录,重新执行 cmake 命令: | ||
132 | |||
133 | ```bash | ||
134 | $OHOS_ROOT/build-tools/cmake/bin/cmake \ | ||
135 | -DOHOS_STL=c++_shared \ | ||
136 | -DOHOS_ARCH=armv8-a \ | ||
137 | -DOHOS_PLATFORM=OHOS \ | ||
138 | -DCMAKE_TOOLCHAIN_FILE=$(find $OHOS_ROOT -name "ohos.toolchain.cmake") | ||
139 | ``` | ||
140 | |||
141 | 这次,编译成功了。万岁! | ||
diff --git a/code/ohos/ohos_compile.html b/code/ohos/ohos_compile.html index 6d6b3ce..bf72035 100644 --- a/code/ohos/ohos_compile.html +++ b/code/ohos/ohos_compile.html | |||
@@ -5,7 +5,7 @@ | |||
5 | <meta charset="utf-8" /> | 5 | <meta charset="utf-8" /> |
6 | <meta name="generator" content="pandoc" /> | 6 | <meta name="generator" content="pandoc" /> |
7 | <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> | 7 | <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
8 | <title>Open Harmony 编译</title> | 8 | <title>OpenHarmony 3.2 编译</title> |
9 | <link rel="stylesheet" href="https://www.qin-juan-ge-zhu.top/common/CSS/pandoc.css"> | 9 | <link rel="stylesheet" href="https://www.qin-juan-ge-zhu.top/common/CSS/pandoc.css"> |
10 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/js/myhighlight.js"></script> | 10 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/js/myhighlight.js"></script> |
11 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/script4code.js"></script> | 11 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/script4code.js"></script> |
@@ -15,9 +15,10 @@ | |||
15 | <div class="pandoc"> | 15 | <div class="pandoc"> |
16 | <div class="main"> | 16 | <div class="main"> |
17 | <header id="title-block-header"> | 17 | <header id="title-block-header"> |
18 | <p class="title">Open Harmony 编译</p> | 18 | <p class="title">OpenHarmony 3.2 编译</p> |
19 | </header> | 19 | </header> |
20 | <!-- 鸿蒙开发环境搭建 --> | 20 | <!-- 鸿蒙开发环境搭建 --> |
21 | <p>[toc]</p> | ||
21 | <blockquote> | 22 | <blockquote> |
22 | <p>本次编译环境搭建参考了以下博客:</p> | 23 | <p>本次编译环境搭建参考了以下博客:</p> |
23 | <ul> | 24 | <ul> |
@@ -38,8 +39,7 @@ | |||
38 | <h2 id="硬件环境">硬件环境</h2> | 39 | <h2 id="硬件环境">硬件环境</h2> |
39 | <p>编译过程使用的是 | 40 | <p>编译过程使用的是 |
40 | <code>Ubuntu</code>,经测试,<code>Ubuntu 22.04 LTS</code>/<code>Ubuntu 20.04 LTS</code>/<code>Ubuntu 18.04 LTS</code> | 41 | <code>Ubuntu</code>,经测试,<code>Ubuntu 22.04 LTS</code>/<code>Ubuntu 20.04 LTS</code>/<code>Ubuntu 18.04 LTS</code> |
41 | 均可用。 | 42 | 均可用。</p> |
42 | </p> | ||
43 | <p>网上的大多数博客里没有对编译的硬件限制作出说明,现根据我们的情况,给出一个大概的范围:</p> | 43 | <p>网上的大多数博客里没有对编译的硬件限制作出说明,现根据我们的情况,给出一个大概的范围:</p> |
44 | <ul> | 44 | <ul> |
45 | <li><strong>内存必须在 10G 以上</strong>,我使用的是 13G,编译成功(8G 时编译失败了,下文会说明)</li> | 45 | <li><strong>内存必须在 10G 以上</strong>,我使用的是 13G,编译成功(8G 时编译失败了,下文会说明)</li> |
@@ -50,20 +50,12 @@ | |||
50 | <li>我用的是 160G 磁盘,编译成功,但基本不剩什么空间了</li> | 50 | <li>我用的是 160G 磁盘,编译成功,但基本不剩什么空间了</li> |
51 | </ul> | 51 | </ul> |
52 | </li> | 52 | </li> |
53 | <li>注意所需要的<strong>ohos 的版本、cpu 版本、位数等信息</strong></li> | ||
53 | </ul> | 54 | </ul> |
54 | <p>这里我用的是 VMWare+Ubuntu22.04 虚拟机。</p> | 55 | <p>这里我用的是 VMWare+Ubuntu22.04 虚拟机。</p> |
55 | <h2 id="软件包依赖">软件包依赖</h2> | 56 | <h2 id="软件包依赖">软件包依赖</h2> |
56 | <p>安装依赖在博客中都有讲,但<strong>少了一部分依赖项</strong>,我因而将所有必要的依赖项整理到一个脚本里了:</p> | 57 | <p>安装依赖在博客中都有讲,但<strong>少了一部分依赖项</strong>,我因而将所有必要的依赖项整理到一个脚本里了:</p> |
57 | <pre><code>#!/bin/bash | 58 | <pre><code>#!/bin/bash |
58 | |||
59 | ########################################################################## | ||
60 | # File Name : harmony.sh | ||
61 | # Encoding : utf-8 | ||
62 | # Author : We-unite | ||
63 | # Email : weunite1848@gmail.com | ||
64 | # Created Time : 2024-02-07 12:32:50 | ||
65 | ########################################################################## | ||
66 | |||
67 | set -e # 一旦出错立刻停止执行,不会执行后续指令 | 59 | set -e # 一旦出错立刻停止执行,不会执行后续指令 |
68 | 60 | ||
69 | # 更新软件源 | 61 | # 更新软件源 |
@@ -115,33 +107,43 @@ ssh-keygen -t rsa -C "your-email-address"</code></pre> | |||
115 | 密钥对的公钥和私钥分别保存在<code>~/.ssh/id_rsa.pub</code>和<code>~/.ssh/id_rsa</code>中。</p> | 107 | 密钥对的公钥和私钥分别保存在<code>~/.ssh/id_rsa.pub</code>和<code>~/.ssh/id_rsa</code>中。</p> |
116 | <p>在 gitee 用户的设置界面,将公钥<code>id_rsa.pub</code>的内容复制到 gitee 的 SSH 公钥中,保存即可。</p> | 108 | <p>在 gitee 用户的设置界面,将公钥<code>id_rsa.pub</code>的内容复制到 gitee 的 SSH 公钥中,保存即可。</p> |
117 | <p>此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。</p> | 109 | <p>此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。</p> |
118 | <h1 id="配置-repo-工具">配置 repo 工具</h1> | 110 | <h1 id="系统源码编译">系统源码编译</h1> |
111 | <h2 id="配置-repo-工具">配置 repo 工具</h2> | ||
119 | <p><strong>注意:前两条命令需要以 root 身份执行!!!</strong></p> | 112 | <p><strong>注意:前两条命令需要以 root 身份执行!!!</strong></p> |
120 | <pre><code># 以下两条命令需要以root身份执行 | 113 | <pre><code># 以下两条命令需要以root身份执行 |
114 | sudo -s | ||
121 | curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo | 115 | curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo |
122 | chmod a+x /usr/local/bin/repo | 116 | chmod a+x /usr/local/bin/repo |
117 | exit | ||
123 | 118 | ||
124 | # 这条普通身份也可以 | 119 | # 这条普通身份也可以 |
125 | pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests</code></pre> | 120 | pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests</code></pre> |
126 | <p>之所以前两条命令需要以 root 身份而不能是 sudo,是因为<code>/usr/local/bin</code>是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root | 121 | <p>之所以前两条命令需要以 root 身份而不能是 sudo,是因为<code>/usr/local/bin</code>是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root |
127 | 身份执行,但<strong>重定向时候 sudo 用的也是当前用户身份</strong>,权限不足,自然报错。(<strong>如果是管道,那么 sudo | 122 | 身份执行,但<strong>重定向时候 sudo 用的也是当前用户身份</strong>,权限不足,自然报错。(<strong>如果是管道,那么 sudo |
128 | 也是只对当前命令有效,而不是对后续的整个管道有效。</strong>)</p> | 123 | 也是只对当前命令有效,而不是对后续的整个管道有效。</strong>)</p> |
129 | <h1 id="系统源码编译">系统源码编译</h1> | ||
130 | <h2 id="获取源码">获取源码</h2> | 124 | <h2 id="获取源码">获取源码</h2> |
131 | <p>通过 repo + https/ssh 下载:</p> | 125 | <p>通过 repo + https/ssh 下载:</p> |
132 | <pre><code># 通过http下载 | 126 | <pre><code># 通过http下载,这里需要注意你需要的ohos的版本 |
133 | repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify | 127 | repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify |
134 | # 或者也可以通过ssh下载 | 128 | # 如果需要的是特定分支,-b后边改成对应分支名 |
129 | # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字, | ||
130 | # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下: | ||
131 | # repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Release --no-repo-verify | ||
132 | # 除使用https外,也可以通过ssh下载 | ||
135 | # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify | 133 | # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify |
134 | |||
136 | repo sync -c | 135 | repo sync -c |
137 | repo forall -c 'git lfs pull'</code></pre> | 136 | repo forall -c 'git lfs pull'</code></pre> |
138 | <h2 id="prebuilts-与编译">prebuilts 与编译</h2> | 137 | <h2 id="prebuilts-与编译">prebuilts 与编译</h2> |
139 | <pre><code># 先在源码根目录下执行脚本,安装编译器及二进制工具 | 138 | <pre><code># 先在源码根目录下执行脚本,安装编译器及二进制工具 |
140 | bash build/prebuilts_download.sh | 139 | bash build/prebuilts_download.sh |
141 | # 再执行如下命令进行版本编译 | 140 | # 再执行如下命令进行版本编译 |
142 | sudo ./build.sh --product-name rk3568 --ccache</code></pre> | 141 | # 注意:默认编译的时候,目标cpu是32位,即使为64位cpu也无法使用64位功能 |
142 | sudo ./build.sh --product-name rk3568 --ccache | ||
143 | # 如果是64位cpu,需要加上--target-cpu=arm64 | ||
144 | sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64</code></pre> | ||
143 | <h2 id="编译完成">编译完成</h2> | 145 | <h2 id="编译完成">编译完成</h2> |
144 | <p>编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的 out/rk3568/packages/phone/images 目录下。</p> | 146 | <p>编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的<code>out/rk3568/packages/phone/images</code>目录下。</p> |
145 | <p>自此源码编译成功,即可进行镜像烧录。</p> | 147 | <p>自此源码编译成功,即可进行镜像烧录。</p> |
146 | <h1 id="编译报错解决记录">编译报错解决记录</h1> | 148 | <h1 id="编译报错解决记录">编译报错解决记录</h1> |
147 | <p>以下记录编译过程中出现的一些出现过的报错、坑点和注意事项,以为后来者鉴。</p> | 149 | <p>以下记录编译过程中出现的一些出现过的报错、坑点和注意事项,以为后来者鉴。</p> |
@@ -186,8 +188,7 @@ sudo mount -o remount -rw /var/snap/firefox/common/host-hunspell</code></pre> | |||
186 | <pre><code>./build.sh --product-name rk3568 --ccache</code></pre> | 188 | <pre><code>./build.sh --product-name rk3568 --ccache</code></pre> |
187 | <p>该命令是指导书中写的编译命令,但执行时候会出错;<strong>与上文所述的经确认无误的编译命令不同在于没加<code>sudo</code></strong>。</p> | 189 | <p>该命令是指导书中写的编译命令,但执行时候会出错;<strong>与上文所述的经确认无误的编译命令不同在于没加<code>sudo</code></strong>。</p> |
188 | <p>如果按照指导书的命令来,不出意外编译将会报错: <img src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_1.png" /> | 190 | <p>如果按照指导书的命令来,不出意外编译将会报错: <img src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_1.png" /> |
189 | <img src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_2.png" /> | 191 | <img src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_2.png" /></p> |
190 | </p> | ||
191 | <p><strong>以下是该问题的具体描述:</strong></p> | 192 | <p><strong>以下是该问题的具体描述:</strong></p> |
192 | <p><code>build.log</code>如下:</p> | 193 | <p><code>build.log</code>如下:</p> |
193 | <pre><code>Set cache size limit to 100.0 GB | 194 | <pre><code>Set cache size limit to 100.0 GB |
@@ -294,7 +295,23 @@ targets := vmlinux</code></pre> | |||
294 | linux 文件,可能文件体积过大而尚未创建完成,所有页面一直驻留在内存中,导致内存崩溃。</p> | 295 | linux 文件,可能文件体积过大而尚未创建完成,所有页面一直驻留在内存中,导致内存崩溃。</p> |
295 | <p>总而言之,言而总之,在<code>VMware->虚拟机->设置->硬件->内存</code>中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G | 296 | <p>总而言之,言而总之,在<code>VMware->虚拟机->设置->硬件->内存</code>中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G |
296 | 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。</p> | 297 | 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。</p> |
297 | <h1 id="完结撒花">完结撒花 ❀</h1> | 298 | <h1 id="ohos-的-ndk">ohos 的 NDK</h1> |
299 | <p>NDK 编译方式比较简单,在源码根目录下执行如下命令:</p> | ||
300 | <pre><code># 安装依赖 | ||
301 | ./build/build_scripts/env_setup.sh | ||
302 | |||
303 | # 执行完上述命令后记得执行source ~/.bashrc或者重启终端 | ||
304 | source ~/.bashrc | ||
305 | |||
306 | # 安装编译SDK需要的依赖包(编译镜像的时候是不依赖这些包的) | ||
307 | sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev | ||
308 | |||
309 | ./build.sh --product-name ohos-sdk --ccache --build-target ohos_ndk</code></pre> | ||
310 | <p>编译出来的 NDK 在<code>out/sdk/packages/ohos-sdk/linux/native</code>下。当然同时也有 windows 版本的 NDK,你猜在哪里?</p> | ||
311 | <p>将编译出来的 NDK 的 zip 解压到你想要的目录下,然后将该目录添加到环境变量中,即可使用。</p> | ||
312 | <p>注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK | ||
313 | 还未我们提供编译所需的全套服务,如编译工具链配置文件<code>ohos.toolchain.cmake</code>、头文件、库文件等。快说,谢谢 ohos~</p> | ||
314 | <h1 id="完结撒花">完结撒花</h1> | ||
298 | <p>本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢:</p> | 315 | <p>本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢:</p> |
299 | <ul> | 316 | <ul> |
300 | <li><strong>有报错,试试添加权限!</strong></li> | 317 | <li><strong>有报错,试试添加权限!</strong></li> |
@@ -306,7 +323,7 @@ targets := vmlinux</code></pre> | |||
306 | </li> | 323 | </li> |
307 | </ul> | 324 | </ul> |
308 | <p>不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了……</p> | 325 | <p>不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了……</p> |
309 | <p class="time">2024.2.12<br>甲辰年正月初三</p> | 326 | <p class="time">2024.2.12,甲辰年正月初三<br>2024.4.24改</p> |
310 | <script src="https://www.qin-juan-ge-zhu.top/common/js/comment.js"></script> | 327 | <script src="https://www.qin-juan-ge-zhu.top/common/js/comment.js"></script> |
311 | </div> | 328 | </div> |
312 | </div> | 329 | </div> |
diff --git a/code/ohos/ohos_compile.md b/code/ohos/ohos_compile.md index e7d2359..150ee25 100644 --- a/code/ohos/ohos_compile.md +++ b/code/ohos/ohos_compile.md | |||
@@ -22,6 +22,7 @@ | |||
22 | - 源码大小就 36G 左右了 | 22 | - 源码大小就 36G 左右了 |
23 | - 大量的依赖会占据数十 G 的空间 | 23 | - 大量的依赖会占据数十 G 的空间 |
24 | - 我用的是 160G 磁盘,编译成功,但基本不剩什么空间了 | 24 | - 我用的是 160G 磁盘,编译成功,但基本不剩什么空间了 |
25 | - 注意所需要的**ohos 的版本、cpu 版本、位数等信息** | ||
25 | 26 | ||
26 | 这里我用的是 VMWare+Ubuntu22.04 虚拟机。 | 27 | 这里我用的是 VMWare+Ubuntu22.04 虚拟机。 |
27 | 28 | ||
@@ -31,15 +32,6 @@ | |||
31 | 32 | ||
32 | ```bash | 33 | ```bash |
33 | #!/bin/bash | 34 | #!/bin/bash |
34 | |||
35 | ########################################################################## | ||
36 | # File Name : harmony.sh | ||
37 | # Encoding : utf-8 | ||
38 | # Author : We-unite | ||
39 | # Email : weunite1848@gmail.com | ||
40 | # Created Time : 2024-02-07 12:32:50 | ||
41 | ########################################################################## | ||
42 | |||
43 | set -e # 一旦出错立刻停止执行,不会执行后续指令 | 35 | set -e # 一旦出错立刻停止执行,不会执行后续指令 |
44 | 36 | ||
45 | # 更新软件源 | 37 | # 更新软件源 |
@@ -107,14 +99,18 @@ ssh-keygen -t rsa -C "your-email-address" | |||
107 | 99 | ||
108 | 此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。 | 100 | 此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。 |
109 | 101 | ||
110 | # 配置 repo 工具 | 102 | # 系统源码编译 |
103 | |||
104 | ## 配置 repo 工具 | ||
111 | 105 | ||
112 | **注意:前两条命令需要以 root 身份执行!!!** | 106 | **注意:前两条命令需要以 root 身份执行!!!** |
113 | 107 | ||
114 | ```bash | 108 | ```bash |
115 | # 以下两条命令需要以root身份执行 | 109 | # 以下两条命令需要以root身份执行 |
110 | sudo -s | ||
116 | curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo | 111 | curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo |
117 | chmod a+x /usr/local/bin/repo | 112 | chmod a+x /usr/local/bin/repo |
113 | exit | ||
118 | 114 | ||
119 | # 这条普通身份也可以 | 115 | # 这条普通身份也可以 |
120 | pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests | 116 | pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests |
@@ -122,17 +118,20 @@ pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests | |||
122 | 118 | ||
123 | 之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) | 119 | 之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) |
124 | 120 | ||
125 | # 系统源码编译 | ||
126 | |||
127 | ## 获取源码 | 121 | ## 获取源码 |
128 | 122 | ||
129 | 通过 repo + https/ssh 下载: | 123 | 通过 repo + https/ssh 下载: |
130 | 124 | ||
131 | ```bash | 125 | ```bash |
132 | # 通过http下载 | 126 | # 通过http下载,这里需要注意你需要的ohos的版本 |
133 | repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify | 127 | repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify |
134 | # 或者也可以通过ssh下载 | 128 | # 如果需要的是特定分支,-b后边改成对应分支名 |
129 | # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字, | ||
130 | # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下: | ||
131 | # repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Release --no-repo-verify | ||
132 | # 除使用https外,也可以通过ssh下载 | ||
135 | # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify | 133 | # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify |
134 | |||
136 | repo sync -c | 135 | repo sync -c |
137 | repo forall -c 'git lfs pull' | 136 | repo forall -c 'git lfs pull' |
138 | ``` | 137 | ``` |
@@ -143,12 +142,15 @@ repo forall -c 'git lfs pull' | |||
143 | # 先在源码根目录下执行脚本,安装编译器及二进制工具 | 142 | # 先在源码根目录下执行脚本,安装编译器及二进制工具 |
144 | bash build/prebuilts_download.sh | 143 | bash build/prebuilts_download.sh |
145 | # 再执行如下命令进行版本编译 | 144 | # 再执行如下命令进行版本编译 |
145 | # 注意:默认编译的时候,目标cpu是32位,即使为64位cpu也无法使用64位功能 | ||
146 | sudo ./build.sh --product-name rk3568 --ccache | 146 | sudo ./build.sh --product-name rk3568 --ccache |
147 | # 如果是64位cpu,需要加上--target-cpu=arm64 | ||
148 | sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64 | ||
147 | ``` | 149 | ``` |
148 | 150 | ||
149 | ## 编译完成 | 151 | ## 编译完成 |
150 | 152 | ||
151 | 编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的 out/rk3568/packages/phone/images 目录下。 | 153 | 编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的`out/rk3568/packages/phone/images`目录下。 |
152 | 154 | ||
153 | 自此源码编译成功,即可进行镜像烧录。 | 155 | 自此源码编译成功,即可进行镜像烧录。 |
154 | 156 | ||
@@ -336,7 +338,77 @@ targets := vmlinux | |||
336 | 338 | ||
337 | 总而言之,言而总之,在`VMware->虚拟机->设置->硬件->内存`中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。 | 339 | 总而言之,言而总之,在`VMware->虚拟机->设置->硬件->内存`中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。 |
338 | 340 | ||
339 | # 完结撒花 ❀ | 341 | # ohos 的 NDK |
342 | |||
343 | NDK 编译方式比较简单,在源码根目录下执行如下命令: | ||
344 | |||
345 | ```bash | ||
346 | # 安装依赖 | ||
347 | ./build/build_scripts/env_setup.sh | ||
348 | |||
349 | # 执行完上述命令后记得执行source ~/.bashrc或者重启终端 | ||
350 | source ~/.bashrc | ||
351 | |||
352 | # 安装编译SDK需要的依赖包(编译镜像的时候是不依赖这些包的) | ||
353 | sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev | ||
354 | |||
355 | ./build.sh --product-name ohos-sdk --ccache --build-target ohos_ndk | ||
356 | ``` | ||
357 | |||
358 | 编译出来的 NDK 在`out/sdk/packages/ohos-sdk/linux/native`下。当然同时也有 windows 版本的 NDK,你猜在哪里? | ||
359 | |||
360 | 将编译出来的 NDK 的 zip 解压到你想要的目录下,然后将该目录添加到环境变量中,即可使用。 | ||
361 | |||
362 | 注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK 还未我们提供编译所需的全套服务,如编译工具链配置文件`ohos.toolchain.cmake`、头文件、库文件等。快说,谢谢 ohos~ | ||
363 | |||
364 | 为了更方便地使用NDK,鄙人不才,写了两个脚本,分别用于cmake编译和单文件编译: | ||
365 | |||
366 | ```bash | ||
367 | #!/bin/bash | ||
368 | |||
369 | ########################################################################## | ||
370 | # File Name : compile.sh | ||
371 | # Encoding : utf-8 | ||
372 | # Author : We-unite | ||
373 | # Email : weunite1848@gmail.com | ||
374 | # Created Time : 2024-02-29 15:19:15 | ||
375 | ########################################################################## | ||
376 | |||
377 | set -e | ||
378 | |||
379 | if [ $UID -eq 0 ]; then | ||
380 | echo "Please do not run this script as root" | ||
381 | exit 1 | ||
382 | fi | ||
383 | |||
384 | if [ $# -ne 2 ]; then | ||
385 | echo "Usage: $0 <static|shared> <v7|v8>" | ||
386 | exit 1 | ||
387 | fi | ||
388 | |||
389 | if [ $2 == "v8" ]; then | ||
390 | arch=arm64-v8a | ||
391 | elif [ $2 == "v7" ]; then | ||
392 | arch=armeabi-v7a | ||
393 | else | ||
394 | echo "Invalid architecture: $2" | ||
395 | exit 1 | ||
396 | fi | ||
397 | |||
398 | link=$1 # static or shared | ||
399 | native_path=~/app/native | ||
400 | |||
401 | export PATH=$native_path/build-tools/cmake/bin:$PATH | ||
402 | |||
403 | # 使用cmake编译,编译生成的文件运行在rk3568上 | ||
404 | cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch -D OHOS_PLATFORM=OHOS -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake) | ||
405 | cmake --build build | ||
406 | ``` | ||
407 | |||
408 | ```bash | ||
409 | ``` | ||
410 | |||
411 | # 完结撒花 | ||
340 | 412 | ||
341 | 本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢: | 413 | 本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢: |
342 | 414 | ||
@@ -345,4 +417,4 @@ targets := vmlinux | |||
345 | - 内存 10G+ | 417 | - 内存 10G+ |
346 | - 磁盘 160G+ | 418 | - 磁盘 160G+ |
347 | 419 | ||
348 | 不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… | 420 | 不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… \ No newline at end of file |
diff --git a/common/html2js.c b/common/html2js.c index 1f38a45..f6bf46c 100644 --- a/common/html2js.c +++ b/common/html2js.c | |||
@@ -2,8 +2,7 @@ | |||
2 | #include <stdlib.h> | 2 | #include <stdlib.h> |
3 | #include <string.h> | 3 | #include <string.h> |
4 | #include <unistd.h> | 4 | #include <unistd.h> |
5 | void html2js(char file_name[]) | 5 | void html2js(char file_name[]) { |
6 | { | ||
7 | FILE *html, *js; | 6 | FILE *html, *js; |
8 | char buf[1024]; | 7 | char buf[1024]; |
9 | size_t i, len; | 8 | size_t i, len; |
@@ -11,27 +10,22 @@ void html2js(char file_name[]) | |||
11 | strcpy(tmp, file_name); | 10 | strcpy(tmp, file_name); |
12 | html = fopen(strcat(tmp, ".html"), "r"); | 11 | html = fopen(strcat(tmp, ".html"), "r"); |
13 | js = fopen(strcat(file_name, ".js"), "w"); | 12 | js = fopen(strcat(file_name, ".js"), "w"); |
14 | if (html == NULL || js == NULL) | 13 | if (html == NULL || js == NULL) { |
15 | { | ||
16 | printf("ERROR:Fail to open file!\n"); | 14 | printf("ERROR:Fail to open file!\n"); |
17 | exit(1); | 15 | exit(1); |
18 | } | 16 | } |
19 | while (!feof(html)) | 17 | while (!feof(html)) { |
20 | { | ||
21 | memset(buf, '\0', 1024); | 18 | memset(buf, '\0', 1024); |
22 | fgets(buf, 1024, html); | 19 | fgets(buf, 1024, html); |
23 | len = strlen(buf); | 20 | len = strlen(buf); |
24 | fprintf(js, "document.writeln(\""); | 21 | fprintf(js, "document.writeln(\""); |
25 | for (i = 0; i < len - 1; i++) | 22 | for (i = 0; i < len - 1; i++) { |
26 | { | 23 | if (buf[i] == '\"' || buf[i] == '\'') { |
27 | if (buf[i] == '\"' || buf[i] == '\'') | ||
28 | { | ||
29 | fprintf(js, "\\"); | 24 | fprintf(js, "\\"); |
30 | } | 25 | } |
31 | fprintf(js, "%c", buf[i]); | 26 | fprintf(js, "%c", buf[i]); |
32 | } | 27 | } |
33 | if (buf[i] != '\n') | 28 | if (buf[i] != '\n') { |
34 | { | ||
35 | fprintf(js, "%c", buf[i]); | 29 | fprintf(js, "%c", buf[i]); |
36 | } | 30 | } |
37 | fprintf(js, "\");\n"); | 31 | fprintf(js, "\");\n"); |
@@ -40,12 +34,11 @@ void html2js(char file_name[]) | |||
40 | fclose(js); | 34 | fclose(js); |
41 | printf("Success!\n"); | 35 | printf("Success!\n"); |
42 | } | 36 | } |
43 | int main() | 37 | int main() { |
44 | { | ||
45 | char file_name[30]; | 38 | char file_name[30]; |
46 | strcpy(file_name, "script4code"); | 39 | strcpy(file_name, "common/script4code"); |
47 | html2js(file_name); | 40 | html2js(file_name); |
48 | strcpy(file_name, "script4works"); | 41 | strcpy(file_name, "common/script4works"); |
49 | html2js(file_name); | 42 | html2js(file_name); |
50 | return 0; | 43 | return 0; |
51 | } | 44 | } |
diff --git a/common/script4works.html b/common/script4works.html index 330cb42..0080751 100644 --- a/common/script4works.html +++ b/common/script4works.html | |||
@@ -100,9 +100,9 @@ | |||
100 | d="M923.2 289.6c0 354.4-232.8 609.6-575.2 620.8-144.8 11.2-244-32.8-332.8-99.2 99.2 11.2 232.8-21.6 298.4-88.8-99.2 0-155.2-56-188-132h88.8C125.6 556.8 58.4 490.4 58.4 380c21.6 11.2 44 21.6 88.8 21.6-77.6-44-121.6-188-66.4-276.8 99.2 110.4 220.8 210.4 421.6 220.8-56-220.8 232.8-332.8 354.4-188 56-11.2 88.8-32.8 132-56-11.2 56-44 88.8-88.8 110.4 44 0 77.6-11.2 110.4-32.8-10.4 44-54.4 88.8-87.2 110.4z" | 100 | d="M923.2 289.6c0 354.4-232.8 609.6-575.2 620.8-144.8 11.2-244-32.8-332.8-99.2 99.2 11.2 232.8-21.6 298.4-88.8-99.2 0-155.2-56-188-132h88.8C125.6 556.8 58.4 490.4 58.4 380c21.6 11.2 44 21.6 88.8 21.6-77.6-44-121.6-188-66.4-276.8 99.2 110.4 220.8 210.4 421.6 220.8-56-220.8 232.8-332.8 354.4-188 56-11.2 88.8-32.8 132-56-11.2 56-44 88.8-88.8 110.4 44 0 77.6-11.2 110.4-32.8-10.4 44-54.4 88.8-87.2 110.4z" |
101 | fill="" p-id="3318"></path> | 101 | fill="" p-id="3318"></path> |
102 | </svg></a> | 102 | </svg></a> |
103 | <a target="_blank" href="mailto:3205135446@qq.com" data-tooltip="勤倦阁主"><svg t="1603709790743" class="icon" | 103 | <a target="_blank" href="mailto:3205135446@qq.com" data-tooltip="勤倦阁主"><svg t="1603709790743" |
104 | viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5171" width="128" | 104 | class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" |
105 | height="128"> | 105 | p-id="5171" width="128" height="128"> |
106 | <path | 106 | <path |
107 | d="M853.333 187.733H170.667A111.019 111.019 0 0 0 59.733 298.667v426.666c0 61.184 49.792 110.934 110.934 110.934h682.666c61.184 0 110.934-49.792 110.934-110.934V298.667c0-61.184-49.75-110.934-110.934-110.934z m59.734 537.6c0 32.939-26.838 59.734-59.734 59.734H170.667c-32.939 0-59.734-26.795-59.734-59.734V298.667c0-32.939 26.795-59.734 59.734-59.734h682.666c32.896 0 59.734 26.795 59.734 59.734v426.666z m-81.622-368.298a25.6 25.6 0 0 1-5.888 35.712L552.62 588.757a68.267 68.267 0 0 1-79.446 0.171l-274.73-196.139a25.6 25.6 0 0 1 29.738-41.685L502.87 547.2a17.067 17.067 0 0 0 19.883-0.043l272.981-196.01a25.6 25.6 0 0 1 35.712 5.888z" | 107 | d="M853.333 187.733H170.667A111.019 111.019 0 0 0 59.733 298.667v426.666c0 61.184 49.792 110.934 110.934 110.934h682.666c61.184 0 110.934-49.792 110.934-110.934V298.667c0-61.184-49.75-110.934-110.934-110.934z m59.734 537.6c0 32.939-26.838 59.734-59.734 59.734H170.667c-32.939 0-59.734-26.795-59.734-59.734V298.667c0-32.939 26.795-59.734 59.734-59.734h682.666c32.896 0 59.734 26.795 59.734 59.734v426.666z m-81.622-368.298a25.6 25.6 0 0 1-5.888 35.712L552.62 588.757a68.267 68.267 0 0 1-79.446 0.171l-274.73-196.139a25.6 25.6 0 0 1 29.738-41.685L502.87 547.2a17.067 17.067 0 0 0 19.883-0.043l272.981-196.01a25.6 25.6 0 0 1 35.712 5.888z" |
108 | fill="" p-id="5172"></path> | 108 | fill="" p-id="5172"></path> |
@@ -117,7 +117,7 @@ | |||
117 | 同时,每一代的子代应放在统一的div内,不得分别存放。 | 117 | 同时,每一代的子代应放在统一的div内,不得分别存放。 |
118 | div内不同个体均以a标签包裹,如还有子代则点击时不可跳转,要求不写href属性 | 118 | div内不同个体均以a标签包裹,如还有子代则点击时不可跳转,要求不写href属性 |
119 | 每个有祖先的div都需要写style="display:none",否则会出现bug | 119 | 每个有祖先的div都需要写style="display:none",否则会出现bug |
120 | 有子代的,子代的dic紧随其后,不得乱放 --> | 120 | 有子代的,子代的div紧随其后,不得乱放 --> |
121 | 121 | ||
122 | 122 | ||
123 | <div class="main-menu" id="main1" onclick="clickit('child1')">-个人作品</div> | 123 | <div class="main-menu" id="main1" onclick="clickit('child1')">-个人作品</div> |
@@ -149,15 +149,21 @@ | |||
149 | </div> | 149 | </div> |
150 | <a onclick="clickit('grandson22')">-一些小玩意儿</a> | 150 | <a onclick="clickit('grandson22')">-一些小玩意儿</a> |
151 | <div class="grandson" id="grandson22" style="display: none;"> | 151 | <div class="grandson" id="grandson22" style="display: none;"> |
152 | <a href="https://www.qin-juan-ge-zhu.top/code/ohos/ohos_compile.html">OpenHarmony编译</a> | ||
153 | <a href="https://www.qin-juan-ge-zhu.top/code/highlight.html">代码高亮与复制</a> | 152 | <a href="https://www.qin-juan-ge-zhu.top/code/highlight.html">代码高亮与复制</a> |
154 | <a href="https://www.qin-juan-ge-zhu.top/code/index.html">C的小零件</a> | 153 | <a href="https://www.qin-juan-ge-zhu.top/code/index.html">C的小零件</a> |
155 | <a href="https://www.qin-juan-ge-zhu.top/code/cpppp.html">C++ Primer Plus基础</a> | 154 | <a href="https://www.qin-juan-ge-zhu.top/code/cpppp.html">C++ Primer Plus基础</a> |
156 | <a href="https://www.qin-juan-ge-zhu.top/code/experiment.html">大物实验MATLAB</a> | 155 | <a href="https://www.qin-juan-ge-zhu.top/code/experiment.html">大物实验MATLAB</a> |
157 | <a href="https://www.qin-juan-ge-zhu.top/code/zeal.html">Zeal文档下载</a> | 156 | <a href="https://www.qin-juan-ge-zhu.top/code/zeal.html">Zeal文档下载</a> |
158 | </div> | 157 | </div> |
159 | <a onclick="clickit('grandson23')">-功能网页</a> | 158 | |
160 | <div class="grandson" id="grandson23" style="display:none"> | 159 | <a onclick="clickit('grandson23')">-OHOS 文档</a> |
160 | <div class="grandson" id="grandson23" style="display: none;"> | ||
161 | <a href="https://www.qin-juan-ge-zhu.top/code/ohos/ohos_compile.html">OpenHarmony编译</a> | ||
162 | <a href="https://www.qin-juan-ge-zhu.top/code/ohos/lcm_compile.html">LCM交叉编译/a> | ||
163 | </div> | ||
164 | |||
165 | <a onclick="clickit('grandson24')">-功能网页</a> | ||
166 | <div class="grandson" id="grandson24" style="display:none"> | ||
161 | <a href="https://code.qin-juan-ge-zhu.top">VSCode Online</a> | 167 | <a href="https://code.qin-juan-ge-zhu.top">VSCode Online</a> |
162 | <a href="https://git.qin-juan-ge-zhu.top">Git托管存储室</a> | 168 | <a href="https://git.qin-juan-ge-zhu.top">Git托管存储室</a> |
163 | <a href="https://file.qin-juan-ge-zhu.top">服务器文件浏览</a> | 169 | <a href="https://file.qin-juan-ge-zhu.top">服务器文件浏览</a> |
diff --git a/common/script4works.js b/common/script4works.js index 9199217..68090f1 100644 --- a/common/script4works.js +++ b/common/script4works.js | |||
@@ -101,9 +101,9 @@ document.writeln(" <path"); | |||
101 | document.writeln(" d=\"M923.2 289.6c0 354.4-232.8 609.6-575.2 620.8-144.8 11.2-244-32.8-332.8-99.2 99.2 11.2 232.8-21.6 298.4-88.8-99.2 0-155.2-56-188-132h88.8C125.6 556.8 58.4 490.4 58.4 380c21.6 11.2 44 21.6 88.8 21.6-77.6-44-121.6-188-66.4-276.8 99.2 110.4 220.8 210.4 421.6 220.8-56-220.8 232.8-332.8 354.4-188 56-11.2 88.8-32.8 132-56-11.2 56-44 88.8-88.8 110.4 44 0 77.6-11.2 110.4-32.8-10.4 44-54.4 88.8-87.2 110.4z\""); | 101 | document.writeln(" d=\"M923.2 289.6c0 354.4-232.8 609.6-575.2 620.8-144.8 11.2-244-32.8-332.8-99.2 99.2 11.2 232.8-21.6 298.4-88.8-99.2 0-155.2-56-188-132h88.8C125.6 556.8 58.4 490.4 58.4 380c21.6 11.2 44 21.6 88.8 21.6-77.6-44-121.6-188-66.4-276.8 99.2 110.4 220.8 210.4 421.6 220.8-56-220.8 232.8-332.8 354.4-188 56-11.2 88.8-32.8 132-56-11.2 56-44 88.8-88.8 110.4 44 0 77.6-11.2 110.4-32.8-10.4 44-54.4 88.8-87.2 110.4z\""); |
102 | document.writeln(" fill=\"\" p-id=\"3318\"></path>"); | 102 | document.writeln(" fill=\"\" p-id=\"3318\"></path>"); |
103 | document.writeln(" </svg></a>"); | 103 | document.writeln(" </svg></a>"); |
104 | document.writeln(" <a target=\"_blank\" href=\"mailto:3205135446@qq.com\" data-tooltip=\"勤倦阁主\"><svg t=\"1603709790743\" class=\"icon\""); | 104 | document.writeln(" <a target=\"_blank\" href=\"mailto:3205135446@qq.com\" data-tooltip=\"勤倦阁主\"><svg t=\"1603709790743\""); |
105 | document.writeln(" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"5171\" width=\"128\""); | 105 | document.writeln(" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\""); |
106 | document.writeln(" height=\"128\">"); | 106 | document.writeln(" p-id=\"5171\" width=\"128\" height=\"128\">"); |
107 | document.writeln(" <path"); | 107 | document.writeln(" <path"); |
108 | document.writeln(" d=\"M853.333 187.733H170.667A111.019 111.019 0 0 0 59.733 298.667v426.666c0 61.184 49.792 110.934 110.934 110.934h682.666c61.184 0 110.934-49.792 110.934-110.934V298.667c0-61.184-49.75-110.934-110.934-110.934z m59.734 537.6c0 32.939-26.838 59.734-59.734 59.734H170.667c-32.939 0-59.734-26.795-59.734-59.734V298.667c0-32.939 26.795-59.734 59.734-59.734h682.666c32.896 0 59.734 26.795 59.734 59.734v426.666z m-81.622-368.298a25.6 25.6 0 0 1-5.888 35.712L552.62 588.757a68.267 68.267 0 0 1-79.446 0.171l-274.73-196.139a25.6 25.6 0 0 1 29.738-41.685L502.87 547.2a17.067 17.067 0 0 0 19.883-0.043l272.981-196.01a25.6 25.6 0 0 1 35.712 5.888z\""); | 108 | document.writeln(" d=\"M853.333 187.733H170.667A111.019 111.019 0 0 0 59.733 298.667v426.666c0 61.184 49.792 110.934 110.934 110.934h682.666c61.184 0 110.934-49.792 110.934-110.934V298.667c0-61.184-49.75-110.934-110.934-110.934z m59.734 537.6c0 32.939-26.838 59.734-59.734 59.734H170.667c-32.939 0-59.734-26.795-59.734-59.734V298.667c0-32.939 26.795-59.734 59.734-59.734h682.666c32.896 0 59.734 26.795 59.734 59.734v426.666z m-81.622-368.298a25.6 25.6 0 0 1-5.888 35.712L552.62 588.757a68.267 68.267 0 0 1-79.446 0.171l-274.73-196.139a25.6 25.6 0 0 1 29.738-41.685L502.87 547.2a17.067 17.067 0 0 0 19.883-0.043l272.981-196.01a25.6 25.6 0 0 1 35.712 5.888z\""); |
109 | document.writeln(" fill=\"\" p-id=\"5172\"></path>"); | 109 | document.writeln(" fill=\"\" p-id=\"5172\"></path>"); |
@@ -118,7 +118,7 @@ document.writeln(" 要求:id严禁重复,每一代的子代必须具 | |||
118 | document.writeln(" 同时,每一代的子代应放在统一的div内,不得分别存放。"); | 118 | document.writeln(" 同时,每一代的子代应放在统一的div内,不得分别存放。"); |
119 | document.writeln(" div内不同个体均以a标签包裹,如还有子代则点击时不可跳转,要求不写href属性"); | 119 | document.writeln(" div内不同个体均以a标签包裹,如还有子代则点击时不可跳转,要求不写href属性"); |
120 | document.writeln(" 每个有祖先的div都需要写style=\"display:none\",否则会出现bug"); | 120 | document.writeln(" 每个有祖先的div都需要写style=\"display:none\",否则会出现bug"); |
121 | document.writeln(" 有子代的,子代的dic紧随其后,不得乱放 -->"); | 121 | document.writeln(" 有子代的,子代的div紧随其后,不得乱放 -->"); |
122 | document.writeln(""); | 122 | document.writeln(""); |
123 | document.writeln(""); | 123 | document.writeln(""); |
124 | document.writeln(" <div class=\"main-menu\" id=\"main1\" onclick=\"clickit(\'child1\')\">-个人作品</div>"); | 124 | document.writeln(" <div class=\"main-menu\" id=\"main1\" onclick=\"clickit(\'child1\')\">-个人作品</div>"); |
@@ -150,15 +150,21 @@ document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code | |||
150 | document.writeln(" </div>"); | 150 | document.writeln(" </div>"); |
151 | document.writeln(" <a onclick=\"clickit(\'grandson22\')\">-一些小玩意儿</a>"); | 151 | document.writeln(" <a onclick=\"clickit(\'grandson22\')\">-一些小玩意儿</a>"); |
152 | document.writeln(" <div class=\"grandson\" id=\"grandson22\" style=\"display: none;\">"); | 152 | document.writeln(" <div class=\"grandson\" id=\"grandson22\" style=\"display: none;\">"); |
153 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/ohos/ohos_compile.html\">OpenHarmony编译</a>"); | ||
154 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/highlight.html\">代码高亮与复制</a>"); | 153 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/highlight.html\">代码高亮与复制</a>"); |
155 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/index.html\">C的小零件</a>"); | 154 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/index.html\">C的小零件</a>"); |
156 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/cpppp.html\">C++ Primer Plus基础</a>"); | 155 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/cpppp.html\">C++ Primer Plus基础</a>"); |
157 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/experiment.html\">大物实验MATLAB</a>"); | 156 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/experiment.html\">大物实验MATLAB</a>"); |
158 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/zeal.html\">Zeal文档下载</a>"); | 157 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/zeal.html\">Zeal文档下载</a>"); |
159 | document.writeln(" </div>"); | 158 | document.writeln(" </div>"); |
160 | document.writeln(" <a onclick=\"clickit(\'grandson23\')\">-功能网页</a>"); | 159 | document.writeln(""); |
161 | document.writeln(" <div class=\"grandson\" id=\"grandson23\" style=\"display:none\">"); | 160 | document.writeln(" <a onclick=\"clickit(\'grandson23\')\">-OHOS 文档</a>"); |
161 | document.writeln(" <div class=\"grandson\" id=\"grandson23\" style=\"display: none;\">"); | ||
162 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/ohos/ohos_compile.html\">OpenHarmony编译</a>"); | ||
163 | document.writeln(" <a href=\"https://www.qin-juan-ge-zhu.top/code/ohos/lcm_compile.html\">LCM交叉编译/a>"); | ||
164 | document.writeln(" </div>"); | ||
165 | document.writeln(""); | ||
166 | document.writeln(" <a onclick=\"clickit(\'grandson24\')\">-功能网页</a>"); | ||
167 | document.writeln(" <div class=\"grandson\" id=\"grandson24\" style=\"display:none\">"); | ||
162 | document.writeln(" <a href=\"https://code.qin-juan-ge-zhu.top\">VSCode Online</a>"); | 168 | document.writeln(" <a href=\"https://code.qin-juan-ge-zhu.top\">VSCode Online</a>"); |
163 | document.writeln(" <a href=\"https://git.qin-juan-ge-zhu.top\">Git托管存储室</a>"); | 169 | document.writeln(" <a href=\"https://git.qin-juan-ge-zhu.top\">Git托管存储室</a>"); |
164 | document.writeln(" <a href=\"https://file.qin-juan-ge-zhu.top\">服务器文件浏览</a>"); | 170 | document.writeln(" <a href=\"https://file.qin-juan-ge-zhu.top\">服务器文件浏览</a>"); |