xref: /docs/en/device-dev/faqs/faqs-building.md (revision e41f4b71)
1e41f4b71Sopenharmony_ci# Compilation and Building
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ci## Mini and Small Systems
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci### "usr/sbin/ninja: invalid option -- w"
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci- **Symptom**
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci  The build fails, and **usr/sbin/ninja: invalid option -- w** is displayed.
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci- **Possible Causes**
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ci  The Ninja version in use does not support the **--w** option.
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci- **Solution**
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci  Uninstall Ninja and GN, and [install Ninja and GN of the required version](../get-code/gettools-ide.md).
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ci### "/usr/bin/ld: cannot find -lncurses"
23e41f4b71Sopenharmony_ci
24e41f4b71Sopenharmony_ci- **Symptom**
25e41f4b71Sopenharmony_ci  
26e41f4b71Sopenharmony_ci  The build fails, and **/usr/bin/ld: cannot find -lncurses** is displayed.
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci- **Possible Causes**
29e41f4b71Sopenharmony_ci  
30e41f4b71Sopenharmony_ci  The ncurses library is not installed.
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci- **Solution**
33e41f4b71Sopenharmony_ci  
34e41f4b71Sopenharmony_ci  ```
35e41f4b71Sopenharmony_ci  sudo apt-get install lib32ncurses5-dev
36e41f4b71Sopenharmony_ci  ```
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci### "line 77: mcopy: command not found"
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci- **Symptom**
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci  The build fails, and **line 77: mcopy: command not found** is displayed.
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci- **Possible Causes**
46e41f4b71Sopenharmony_ci  
47e41f4b71Sopenharmony_ci  mcopy is not installed.
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ci- **Solution**
50e41f4b71Sopenharmony_ci  
51e41f4b71Sopenharmony_ci  ```
52e41f4b71Sopenharmony_ci  sudo apt-get install dosfstools mtools
53e41f4b71Sopenharmony_ci  ```
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci### "riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory"
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ci- **Symptom**
59e41f4b71Sopenharmony_ci  
60e41f4b71Sopenharmony_ci  The build fails, and the following information is displayed: <br>**riscv32-unknown-elf-gcc: error trying to exec 'cc1': execvp: No such file or directory**
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci- **Possible Causes**
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci  You do not have the required permission to access files in the RISC-V compiler directory.
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ci- **Solution**
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci    1. Run the following command to locate **gcc_riscv32**:
69e41f4b71Sopenharmony_ci    
70e41f4b71Sopenharmony_ci     ```
71e41f4b71Sopenharmony_ci     which riscv32-unknown-elf-gcc
72e41f4b71Sopenharmony_ci     ```
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci     
75e41f4b71Sopenharmony_ci  
76e41f4b71Sopenharmony_ci  2. Run the **chmod** command to change the directory permission to **755**.
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci
79e41f4b71Sopenharmony_ci### "No module named 'Crypto'"
80e41f4b71Sopenharmony_ci
81e41f4b71Sopenharmony_ci- **Symptom**
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci  The build fails, and **No module named 'Crypto'** is displayed.
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ci- **Possible Causes**
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci  Crypto is not installed in Python3.
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ci- **Solution**
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci  1. Run the following command to query the Python version:
92e41f4b71Sopenharmony_ci     
93e41f4b71Sopenharmony_ci      ```
94e41f4b71Sopenharmony_ci      python3 --version
95e41f4b71Sopenharmony_ci      ```
96e41f4b71Sopenharmony_ci  2. Ensure that Python 3.7 or later is installed, and then run the following command to install pycryptodome:
97e41f4b71Sopenharmony_ci     
98e41f4b71Sopenharmony_ci      ```
99e41f4b71Sopenharmony_ci      sudo pip3 install pycryptodome
100e41f4b71Sopenharmony_ci      ```
101e41f4b71Sopenharmony_ci
102e41f4b71Sopenharmony_ci
103e41f4b71Sopenharmony_ci### "xx.sh: xx unexpected operator"
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci- **Symptom**
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci  The build fails, and **xx.sh [: xx unexpected operator** is displayed.
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci- **Possible Causes**
110e41f4b71Sopenharmony_ci
111e41f4b71Sopenharmony_ci  The build environment shell is not bash.
112e41f4b71Sopenharmony_ci
113e41f4b71Sopenharmony_ci- **Solution**
114e41f4b71Sopenharmony_ci  
115e41f4b71Sopenharmony_ci  ```
116e41f4b71Sopenharmony_ci  sudo rm -rf /bin/sh
117e41f4b71Sopenharmony_ci  sudo ln -s /bin/bash /bin/sh
118e41f4b71Sopenharmony_ci  ```
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci
121e41f4b71Sopenharmony_ci### "Could not find a version that satisfies the requirement six&gt;=1.9.0"
122e41f4b71Sopenharmony_ci
123e41f4b71Sopenharmony_ci- **Symptom**
124e41f4b71Sopenharmony_ci
125e41f4b71Sopenharmony_ci  The following information is displayed during the build process:
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci  
128e41f4b71Sopenharmony_ci  ```
129e41f4b71Sopenharmony_ci  Could not find a version that satisfies the requirement six>=1.9.0
130e41f4b71Sopenharmony_ci  ```
131e41f4b71Sopenharmony_ci
132e41f4b71Sopenharmony_ci- **Possible Causes**
133e41f4b71Sopenharmony_ci
134e41f4b71Sopenharmony_ci  **six** is not installed.
135e41f4b71Sopenharmony_ci
136e41f4b71Sopenharmony_ci- **Solution**
137e41f4b71Sopenharmony_ci
138e41f4b71Sopenharmony_ci  Method 1: Run the **pip3 install six** command to install **six** online.
139e41f4b71Sopenharmony_ci
140e41f4b71Sopenharmony_ci  Method 2: Install **six** offline.
141e41f4b71Sopenharmony_ci
142e41f4b71Sopenharmony_ci  1. Download the installation package from [PyPI](https://pypi.org/project/six/#files).
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ci  
145e41f4b71Sopenharmony_ci  ![](figures/en-us_image_0000001251276115.png)
146e41f4b71Sopenharmony_ci  
147e41f4b71Sopenharmony_ci  2. Save the source code to the Linux server and run the **pip3 install six-1.14.0-py2.py3-none-any.whl** command to install **six**.
148e41f4b71Sopenharmony_ci  
149e41f4b71Sopenharmony_ci  3. Start the build again.
150e41f4b71Sopenharmony_ci
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ci### "cannot find -lgcc"
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci- **Symptom**
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci  The following information is displayed during the build process:
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci  
159e41f4b71Sopenharmony_ci  ```
160e41f4b71Sopenharmony_ci  riscv32-unknown-elf-ld: cannot find -lgcc
161e41f4b71Sopenharmony_ci  ```
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_ci- **Possible Causes**
164e41f4b71Sopenharmony_ci
165e41f4b71Sopenharmony_ci  The gcc_riscv32 path is incorrectly set as follows. There is an extra slash (/) after **bin**.
166e41f4b71Sopenharmony_ci
167e41f4b71Sopenharmony_ci  
168e41f4b71Sopenharmony_ci  ```
169e41f4b71Sopenharmony_ci  ~/gcc_riscv32/bin/:/data/toolchain/
170e41f4b71Sopenharmony_ci  ```
171e41f4b71Sopenharmony_ci
172e41f4b71Sopenharmony_ci- **Solution**
173e41f4b71Sopenharmony_ci
174e41f4b71Sopenharmony_ci  Modify the gcc_riscv32 path as follows:
175e41f4b71Sopenharmony_ci
176e41f4b71Sopenharmony_ci  
177e41f4b71Sopenharmony_ci  ```
178e41f4b71Sopenharmony_ci  ~/gcc_riscv32/bin:/data/toolchain/
179e41f4b71Sopenharmony_ci  ```
180e41f4b71Sopenharmony_ci
181e41f4b71Sopenharmony_ci
182e41f4b71Sopenharmony_ci### Failed to Find Python
183e41f4b71Sopenharmony_ci
184e41f4b71Sopenharmony_ci- **Symptom**
185e41f4b71Sopenharmony_ci
186e41f4b71Sopenharmony_ci  The following information is displayed during the build process:
187e41f4b71Sopenharmony_ci
188e41f4b71Sopenharmony_ci  
189e41f4b71Sopenharmony_ci  ```
190e41f4b71Sopenharmony_ci  -bash: /usr/bin/python: No such file or directory
191e41f4b71Sopenharmony_ci  ```
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ci- **Possible Cause 1**
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci  Python is not installed.
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ci- **Solution**
198e41f4b71Sopenharmony_ci
199e41f4b71Sopenharmony_ci  Run the following command to install Python. The following uses Python 3.8 as an example.
200e41f4b71Sopenharmony_ci
201e41f4b71Sopenharmony_ci  
202e41f4b71Sopenharmony_ci  ```
203e41f4b71Sopenharmony_ci  sudo apt-get install python3.8
204e41f4b71Sopenharmony_ci  ```
205e41f4b71Sopenharmony_ci
206e41f4b71Sopenharmony_ci- **Possible Cause 2**
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_ci  The soft link to Python does not exist in the **usr/bin** directory.
209e41f4b71Sopenharmony_ci
210e41f4b71Sopenharmony_ci  ![](figures/en-us_image_0000001243200677.png)
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ci- **Solution**
213e41f4b71Sopenharmony_ci
214e41f4b71Sopenharmony_ci  Run the following commands to add the soft link to Python:
215e41f4b71Sopenharmony_ci
216e41f4b71Sopenharmony_ci  
217e41f4b71Sopenharmony_ci  ```
218e41f4b71Sopenharmony_ci  # cd /usr/bin/ 
219e41f4b71Sopenharmony_ci  # which python3
220e41f4b71Sopenharmony_ci  # ln -s /usr/local/bin/python3 python
221e41f4b71Sopenharmony_ci  # python --version
222e41f4b71Sopenharmony_ci  ```
223e41f4b71Sopenharmony_ci
224e41f4b71Sopenharmony_ci  Example:
225e41f4b71Sopenharmony_ci
226e41f4b71Sopenharmony_ci  ![](figures/en-us_image_0000001243320787.png)
227e41f4b71Sopenharmony_ci
228e41f4b71Sopenharmony_ci
229e41f4b71Sopenharmony_ci### Failed to Find Python3
230e41f4b71Sopenharmony_ci
231e41f4b71Sopenharmony_ci- **Symptom**
232e41f4b71Sopenharmony_ci
233e41f4b71Sopenharmony_ci  ![](figures/en-us_image_0000001251276255.png)
234e41f4b71Sopenharmony_ci
235e41f4b71Sopenharmony_ci- **Possible Causes**
236e41f4b71Sopenharmony_ci
237e41f4b71Sopenharmony_ci  Python 3 is not installed.
238e41f4b71Sopenharmony_ci
239e41f4b71Sopenharmony_ci- **Solution**
240e41f4b71Sopenharmony_ci
241e41f4b71Sopenharmony_ci  Run the following command to install Python 3:
242e41f4b71Sopenharmony_ci
243e41f4b71Sopenharmony_ci  
244e41f4b71Sopenharmony_ci  ```
245e41f4b71Sopenharmony_ci  sudo apt-get install python3.8
246e41f4b71Sopenharmony_ci  ```
247