I simply want to run an executable from the command line, ./arm-mingw32ce-g++
, but then I get the error message,
bash: ./arm-mingw32ce-g++: No such file or directory
I’m running Ubuntu Linux 10.10. ls -l
lists
-rwxr-xr-x 1 root root 433308 2010-10-16 21:32 arm-mingw32ce-g++
Using sudo (sudo ./arm-mingw32ce-g++
) gives
sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory
I have no idea why the OS can’t even see the file when it’s there. Any thoughts?
asked Oct 16, 2010 at 14:00
This error can mean that ./arm-mingw32ce-g++
doesn’t exist (but it does), or that it exists and is a dynamically linked executable recognized by the kernel but whose dynamic loader is not available. You can see what dynamic loader is required by running ldd /arm-mingw32ce-g++
; anything marked not found
is the dynamic loader or a library that you need to install.
If you’re trying to run a 32-bit binary on an amd64 installation:
- Up to Ubuntu 11.04, install the package
ia32-libs
. - On Ubuntu 11.10, install
ia32-libs-multiarch
. - Starting with 12.04, install
ia32-libs-multiarch
, or select a reasonable set of:i386
packages in addition to the:amd64
packages.
answered Oct 16, 2010 at 14:25
10
I faced this error when I was trying to build Selenium source on Ubuntu. The simple shell script with correct shebang was not able to run even after I had all pre-requisites covered.
file file-name # helped me in understanding that CRLF ending were present in the file.
I opened the file in Vim and I could see that just because I once edited this file on a Windows machine, it was in DOS format. I converted the file to Unix format with below command:
dos2unix filename # actually helped me and things were fine.
I hope that we should take care whenever we edit files across platforms we should take care for the file formats as well.
answered Sep 23, 2015 at 9:29
JitendraJitendra
7066 silver badges10 bronze badges
4
This error may also occur if trying to run a script and the shebang is misspelled. Make sure it reads #!/bin/sh
, #!/bin/bash
, or whichever interpreter you’re using.
answered Jan 27, 2014 at 20:24
ZoltánZoltán
21.2k14 gold badges92 silver badges133 bronze badges
3
I had the same error message when trying to run a Python script — this was not @Warpspace’s intended use case (see other comments), but this was among the top hits to my search, so maybe somebody will find it useful.
In my case it was the DOS line endings (rn
instead of n
) that the shebang line (#!/usr/bin/env python
) would trip over. A simple dos2unix myfile.py
fixed it.
answered Feb 23, 2015 at 15:50
djlaukdjlauk
3,1791 gold badge12 silver badges12 bronze badges
1
I found my solution for my Ubuntu 18 here.
sudo dpkg --add-architecture i386
Then:
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
answered May 15, 2020 at 15:37
betontalpfabetontalpfa
3,3841 gold badge32 silver badges65 bronze badges
1
As mentioned by others, this is because the loader can’t be found, not your executable file. Unfortunately the message is not clear enough.
You can fix it by changing the loader that your executable uses, see my thorough answer in this other question: Multiple glibc libraries on a single host
Basically you have to find which loader it’s trying to use:
$ readelf -l arm-mingw32ce-g++ | grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]
Then find the right path for an equivalent loader, and change your executable to use the loader from the path that it really is:
$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++
You will probably need to set the path of the includes too, you will know if you want it or not after you try to run it. See all the details in that other thread.
answered Jul 11, 2019 at 21:52
msbmsb
3,7793 gold badges30 silver badges38 bronze badges
2
I got this error “No such file or directory”
but it exists because my file was created in Windows and I tried to run it on Ubuntu and the file contained invalid 15r where ever a new line was there.
I just created a new file truncating unwanted stuff
sleep: invalid time interval ‘15r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh
0000000 # ! / u s r / b i n / e n v b
0000020 a s h r n w g e t h t t p : /
0000400 : 4 1 2 0 / r n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed
0000000 # ! / u s r / b i n / e n v b
0000020 a s h n w g e t h t t p : / /
0000400 / n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed
answered Jan 14, 2016 at 15:09
likeGreenlikeGreen
1,0071 gold badge19 silver badges38 bronze badges
I got the same error for a simple bash script that wouldn’t have 32/64-bit issues. This is possibly because the script you are trying to run has an error in it. This ubuntu forum post indicates that with normal script files you can add sh
in front and you might get some debug output from it. e.g.
$ sudo sh arm-mingw32ce-g++
and see if you get any output.
In my case the actual problem was that the file that I was trying to execute was in Windows format rather than Linux.
answered Nov 27, 2013 at 14:58
icc97icc97
11.1k8 gold badges72 silver badges88 bronze badges
Below command worked on 16.4 Ubuntu
This issue comes when your .sh file is corrupt or not formatted as per unix protocols.
dos2unix converts the .sh file to Unix format!
sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh
sudo ./test.sh
answered Apr 20, 2018 at 9:27
SoumyaanshSoumyaansh
8,5567 gold badges44 silver badges44 bronze badges
I had the same problem with a file that I’ve created on my mac.
If I try to run it in a shell with ./filename I got the file not found error message.
I think that something was wrong with the file.
what I’ve done:
open a ssh session to the server
cat filename
copy the output to the clipboard
rm filename
touch filename
vi filename
i for insert mode
paste the content from the clipboard
ESC to end insert mode
:wq!
This worked for me.
answered Oct 12, 2014 at 21:44
spacespace
211 bronze badge
1
Added here for future reference (for users who might fall into the same case):
This error happens when working on Windows (which introduces extra characters because of different line separator than Linux system) and trying to run this script (with extra characters inserted) in Linux. The error message is misleading.
In Windows, the line separator is CRLF (rn) whereas in linux it is LF (n). This can be usually be chosen in text editor.
In my case, this happened due to working on Windows and uploading to Unix server for execution.
answered Jan 24, 2020 at 2:54
PALENPALEN
2,7542 gold badges23 silver badges24 bronze badges
1
I just had this issue in mingw32 bash
. I had execuded node/npm from Program Files (x86)nodejs
and then moved them into disabled
directory (essentially removing them from path). I also had Program Filesnodejs
(ie. 64bit version) in path, but only after the x86 version. After restarting the bash shell, the 64bit version of npm could be found. node
worked correctly all the time (checked with node -v
that changed when x86 version was moved).
I think bash -r
would’ve worked instead of restarting bash: https://unix.stackexchange.com/a/5610
answered Jul 15, 2016 at 8:31
Pasi SavolainenPasi Savolainen
2,4401 gold badge22 silver badges35 bronze badges
I had this issue and the reason was EOL in some editors such as Notepad++. You can check it in Edit menu/EOL conversion. Unix(LF) should be selected.
I hope it would be useful.
answered Sep 22, 2019 at 12:04
1
Hit this error trying to run terraform/terragrunt (Single go binary).
Using which terragrunt
to find where executable was, got strange error when running it in local dir or with full path
bash: ./terragrunt: No such file or directory
Problem was that there was two installations of terragrunt, used brew uninstall terragrunt
to remove one fixed it.
After removing the one, which terragrunt
showed the new path /usr/bin/terragrunt
everything worked fine.
answered Dec 14, 2020 at 20:46
PieterPieter
1,88717 silver badges17 bronze badges
For those encountering this error when running a java program, it’s possible that you’re trying to run a 64-bit java program using on a 32-bit linux operating system.
I only realised when I ran ldd on 64-bit java which reported:
ldd /usr/java/jdk1.8.0_05/bin/java
‘not a dynamic executable’
Whereas the old 32 bit java reported sensible results:
ldd /usr/java/jdk1.8.0_05/bin/java
answered Jan 22, 2022 at 7:52
keithphwkeithphw
3801 gold badge4 silver badges14 bronze badges
In a .sh
script, each line MUST end with a single character — newline (LF
or «n
«).
Don’t make mistakes like me, because my text-editor of choice is Notepad++ in Win.
The default line ending in Win is «rn
» (CR LF
), and such ending is not standard for Linux shell scripts.
answered Dec 16, 2022 at 22:20
In my case, it turns out the file was a symlink:
$ cat deluge-gtk.lock
cat: deluge-gtk.lock: No such file or directory
$ file deluge-gtk.lock
deluge-gtk.lock: broken symbolic link to 32309
Misleading errors like this are fairly common on Linux. Related discussion: https://lwn.net/Articles/532771/
answered Nov 2, 2021 at 5:01
NavinNavin
3,6462 gold badges28 silver badges52 bronze badges
Give it a try by changing the name of file or folder which is not showing in terminal/command prompt.
step1 : change the name of file or folder.
step2 : cd filename/foldername
answered Nov 21, 2021 at 19:10
2
For future readers, I had this issue when trying to launch a Django server using gunicorn. I was using AWS CodeBuild to build the virtual environment and run tests and using CodeDeploy to put the built artifacts onto the production server and launch the new version (all environments were Ubuntu 20.04). I had mistakenly thought that env/bin/...
contained actual binaries of native libraries but that was not the case. It was just Python scripts with a shebang of the path to the Python interpreter on the build machine. In my case, the machine installing the packages and actually running the packages was different. To be more specific, all of the files in env/bin
had the shebang #!/codebuild/output/src715682316/src/env/bin/python
, so of course running env/bin/gunicorn
on the production server would fail. The cryptic error message was when Ubuntu would tell me that env/bin/gunicorn
didn’t exist as opposed to saying /codebuild/output/src715682316/src/env/bin/python
didn’t exist. I was able to fix this problem by starting gunicorn using python3 env/bin/gunicorn
instead of env/bin/gunicorn
.
answered May 22, 2022 at 20:17
Badr BBadr B
9201 gold badge8 silver badges17 bronze badges
This: sed -i -e 's/r$//' FILE
, could potentially fix your problem.
As many answers already have explained, this issue could be caused by line endings being rn
in Windows and only n
in Linux. A suggested approach was to use dos2unix
. As far as I understand this is not standard on most Linux distributions, and in my case I could not install / use it.
Therefore I used the following approach, (mentioned in Bash script – «/bin/bash^M: bad interpreter: No such file or directory»), where you can use the sed
command instead.
sed -i -e 's/r$//' FILE
where you replace FILE
with the name of your file, e.g. sed -i -e 's/r$//' myscript.sh
If you for some reason do not have sed
installed but do not want to use dos2unix
you can use the following to install sed
:
sudo apt-get update
sudo apt-get install sed
answered Mar 30 at 13:38
darclanderdarclander
1,5061 gold badge12 silver badges35 bronze badges
1
Yet another possible reason: the file is a binary linked dynamically against musl
(most likely for alpine)
on debian system you will have to install
apt-get update -y && apt-get install -y musl musl-dev musl-tools
answered Apr 14 at 11:15
Daniel BraunDaniel Braun
2,39326 silver badges25 bronze badges
I’ve downloaded a game (Shank) but the bin file doesn’t run. The error that is shown when I try to launch the executable is:
bash: ./shank-linux-120720110-1-bin: No such file or directory
asked May 7, 2012 at 19:06
FrancescoFrancesco
2,8812 gold badges14 silver badges12 bronze badges
7
You’re probably trying to run a 32-bit binary on a 64-bit system that doesn’t have 32-bit support installed.
There are three cases where you can get the message “No such file or directory”:
- The file doesn’t exist. I presume you’ve checked that the file does exist (perhaps because the shell completes it).
- There is a file by that name, but it’s a dangling symbolic link.
- The file exists, and you can even read it (for example, the command
file shank-linux-120720110-1-bin
displays something like “ELF 32-bit LSB executable …”), and yet when you try to execute it you’re told that the file doesn’t exist.
The error message in this last case is admittedly confusing. What it’s telling you is that a key component of the runtime environment necessary to run the program is missing. Unfortunately, the channel through which the error is reported only has room for the error code and not for this extra information that it’s really the runtime environment that’s to blame. If you want the technical version of this explanation, read Getting “Not found” message when running a 32-bit binary on a 64-bit system.
The file
command will tell you just what this binary is. With a few exceptions, you can only run a binary for the processor architecture that your release of Ubuntu is for. The main exception is that you can run 32-bit (x86, a.k.a. IA32) binaries on 64-bit (amd64, a.k.a. x86_64) systems.
In Ubuntu up to 11.04, to run a 32-bit binary on a 64-bit installation, you need to install the ia32-libs
package . You may need to install additional libraries (you’ll get an explicit error message if you do).
Since 11.10 (oneiric) introduced multiarch support, you can still install ia32-libs
, but you can choose a finer-grained approach, it’s enough to get libc6-i386
(plus any other necessary library).
answered May 7, 2012 at 21:47
9
64 bit Ubuntu Multiarch systems
Follow this answer only if the output of file file-name
shows,
file-name: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
To run 32bit executable file in a 64 bit multi-arch Ubuntu system, you have to add i386
architecture and also you have to install libc6:i386
,libncurses5:i386
,libstdc++6:i386
these three library packages.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
answered Apr 24, 2014 at 13:14
Avinash RajAvinash Raj
76.7k55 gold badges213 silver badges253 bronze badges
4
To expand on @Gilles answer, there are at least three scenarios resulting in this error:
- The file doesn’t exist.
- The file exists but is a dangling symbolic link.
- The file exists (e.g.
file
command works), making for a puzzling error message. This may mean there’s a problem with the loader.
Categories of loader problems:
-
An executable’s loader does not exist. You can check this using the file command and see if the loader does exist. E.g.
file lmgrd lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
Notice
interpreter /lib64/ld-lsb-x86-64.so.3
; if this file does not exist, you need to install it. For this particular loader on 16.04, the answer turned out to besudo apt-get install lsb
. -
Issues with a script’s loader (see this answer).
- Missing shared libraries — use
ldd <file-name>
to check for any «not found» libraries. See this answer for more info.
The loader not existing could be due to a 32/64 bit mismatch or some other reason. There might be other kinds of loader errors I don’t know about.
answered May 11, 2018 at 18:54
jtpereydajtpereyda
2,0353 gold badges20 silver badges21 bronze badges
4
Here’s a transcript showing a bit more about the nature of the problem, and how to fix it as of Ubuntu 16.04. Notice that even though file
reports «dynamically linked», ldd
reports «not a dynamic executable».
$ ./myprogram
bash: myprogram: No such file or directory
$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped
$ ldd myprogram
not a dynamic executable
Once you install libc6:i386, things start improving…
$ sudo apt-get install libc6:i386 # the initial fix
...
$ ldd myprogram
linux-gate.so.1 => (0xf77fd000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
/lib/ld-linux.so.2 (0x56578000)
$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
To complete the job, you may need to identify and install additional libraries one at a time…
$ sudo apt-get install libstdc++6:i386 ## may require various additional libs
$ ./myprogram
... works correctly ...
I don’t know if there is a systematic way of identifying the correct libraries to install. There is a bit of guesswork mapping the error messages to package names (tab completion helps).
answered Jun 8, 2016 at 20:57
Brent BradburnBrent Bradburn
2,7362 gold badges29 silver badges35 bronze badges
1
By installing the deb for 32 bit I realized I was missing some libraries (in addition to ia32-libs and libc6). I first solved this problem by giving this command:
sudo apt-get install -f
Then I got another error:
Message: SDL_GL_LoadLibrary
Error: Failed loading libGL.so.1
Obviously, these libraries were properly installed. Without going into details I had to link the libraries by hand. I realized then that could also an easier solution through Synaptic install the following packages:
libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.
After that the next problem was the black screen while playing, which I solved by replacing the executable in /Shank/bin with this:
http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar.bz2.
I hope it will be useful to someone.
If you need more help or more details please feel free to contact me.
kiri
27.4k16 gold badges80 silver badges117 bronze badges
answered May 9, 2012 at 19:12
FrancescoFrancesco
2,8812 gold badges14 silver badges12 bronze badges
This error happens when working on Windows (which introduces extra characters because of different line separator than Linux system) and trying to run this script (with extra characters inserted) in Linux. The error message is misleading.
In Windows, the line separator is CRLF (rn) whereas in linux it is LF (n). In my case, this happened due to working on Windows and uploading to Unix server for execution.
answered Jan 24, 2020 at 2:55
PALENPALEN
1,0811 gold badge8 silver badges6 bronze badges
2
Google navigated me to this page. My issue was distantly related to the title of this thread, so I am posting it here for the future visitors like me:
It is one of the weirdest issues:
$ ls -lh
ls: cannot access .~dataprep.ipynb: No such file or directory
-????????? ? ? ? ? ? .~dataprep.ipynb
-rw------- 1 tgowda mygroup 475K Jun 12 15:59 dataprep.ipynb
I see that the file .~dataprep.ipynb
is right there with some weird ??
permissions.
I just wanted to get rid of that messed up file.
rm
command could not remove it. mv
command couldn’t move it.
And then…
$ python
>>> from pathlib import Path
>>> list(Path('.').glob("*.ipynb"))
[PosixPath('.~dataprep.ipynb'), PosixPath('dataprep.ipynb')]
>>> p = list(Path('.').glob("*.ipynb"))[0]
>>> p
PosixPath('.~dataprep.ipynb')
>>> p.unlink()
>>> list(Path('.').glob("*.ipynb"))
[PosixPath('dataprep.ipynb')]
And that’s how I was able to defeat it.
answered Jun 13, 2020 at 3:36
None of the above answers worked for me because there was a miss-resolving for the interpreter.
I have written a detailed answer here, explaining how to fix this issue.
Thanks to this man who shared his experience with others solution here.
thanks to him i was able to solve this problem.To summarize, as @steeldriver though, there was an interpreter problem.
the linker is giving to my program [/lib/ld64.so.1] as ELF interpreter but this path doesnt exist at all and i checked it by:> ls /lib/ld64.so.1 ls: cannot access '/lib/ld64.so.1': No such file or directory
After that, i checked the interpreters path’s on my ubuntu installation by:
> ls /lib64/ld-* /lib64/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3
so the solution is to create a link of one of this interpreters to the inexistant interpreter path by:
sudo ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld64.so.1
Now we re-check the inexistent interpreter one more time to see if its still inexisting or not:
> ls /lib/ld64.so.1 /lib/ld64.so.1
Now this command has returned /lib/ld64.so.1 instead of «inexistant file». so the problem was solved and i could run ./main successfully
So, in a summary, you have to create a link of one of this interpreters to the inexistant interpreter path by running the following command in a terminal (Ctrl + Alt + T) :
sudo ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld64.so.1
answered Jan 28, 2022 at 21:06
3
This answer is for those who logged out after editing the .bash_profile
, which means you’re probably in a situation where you can’t use your login screen.
I can’t ensure you this will work for you.
Short Answer
If, for some reason, you don’t even have access to a shell,
switch to a virtual console with Ctrl+Alt+F2 and login.
Once you’re at a shell prompt,
use command -p <insert_command_here>
to edit the file in question,
where <insert_command_here>
is something like nano .bash_profile
.
Long Answer
I’m using Manjaro, but I doubt that means anything in this scenario.
I was in the login screen. I typed my credentials and then nothing happened. As nothing was working anymore, I had no prompt to work with. I could move my cursor just fine, but none of the login screen buttons worked.
I pressed Ctrl+Alt+F2. I now had a console terminal to work with. I could go back to the previous screen with Ctrl+Alt+F1, but that wasn’t necessary.
I was met with a login prompt and filled in my credentials.
I tried using the commands am used to working with, but nothing worked. I’d get the default:
-bash: something_something: command not found.
But, I found that I COULD use cd
, but I couldn’t list directory contents with ls
. I did some research and found out that cd
is a built-in command. I wanted to confirm that I could work with built-in commands and found a way to display all of them:
compgen -b
I was now met with a lot of commands I could work with. I had no idea what most of them do. I could recognize commands such as source
, cd
, echo
and exit
. I couldn’t find any good material explaining how to use these built-in commands. Maybe I just didn’t search well enough. Anyway, since help
is also a built-in command, I tried using it on some of the built-in commands. Eventually I did:
help command
one of the options was:
command -p
Use a default value for
PATH
that is guaranteed to find all of the default utilities.
That sounded pretty useful, so I went ahead and tried to do:
command -p ls
And it worked. Now I figured that I just needed to edit the .bash_profile
file and so I did:
cd ~
command -p nano .bash_profile
I then deleted the few lines I had added that had messed up my path. If you don’t know which lines that is, then I suppose you’d be safe with some sort of default path. I can imagine that’s a thing. If it wasn’t .bash_profile
that caused the issue for you, then I suppose you can try editing the file that did.
I then rebooted the system and everything was back to normal.
On Ubuntu, I get a ‘No such file or directory’ error when I try to execute a command.
I have checked with ls -la
, the file adb
is there and it has ‘x’ flag
So why I am getting a ‘No such file or directory’?
~/Programs/android-sdk-linux_x86/platform-tools$ ./adb
bash: ./adb: No such file or directory
~/Programs/android-sdk-linux_x86/platform-tools$ ls -la
total 34120
drwxrwxr-x 3 silverstri silverstri 4096 2011-10-08 18:50 .
drwxrwxr-x 8 silverstri silverstri 4096 2011-10-08 18:51 ..
-rwxrwxr-x 1 silverstri silverstri 3764858 2011-10-08 18:50 aapt
-rwxrwxr-x 1 silverstri silverstri 366661 2011-10-08 18:50 adb
-rwxrwxr-x 1 silverstri silverstri 906346 2011-10-08 18:50 aidl
-rwxrwxr-x 1 silverstri silverstri 328445 2011-10-08 18:50 dexdump
-rwxrwxr-x 1 silverstri silverstri 2603 2011-10-08 18:50 dx
drwxrwxr-x 2 silverstri silverstri 4096 2011-10-08 18:50 lib
-rwxrwxr-x 1 silverstri silverstri 14269620 2011-10-08 18:50 llvm-rs-cc
-rwxrwxr-x 1 silverstri silverstri 14929076 2011-10-08 18:50 llvm-rs-cc-2
-rw-rw-r-- 1 silverstri silverstri 241 2011-10-08 18:50 llvm-rs-cc.txt
-rw-rw-r-- 1 silverstri silverstri 332494 2011-10-08 18:50 NOTICE.txt
-rw-rw-r-- 1 silverstri silverstri 291 2011-10-08 18:50 source.properties
asked Oct 9, 2011 at 2:52
2
It’s an executable file that misses required libraries. Use ldd
to see what it needs, then provide these files.
answered Oct 9, 2011 at 9:39
Daniel Beck♦Daniel Beck
109k14 gold badges286 silver badges334 bronze badges
1
Android SDK requires 32-bit libraries. You probably are on 64-bit and need the 32-bit libs. Here are the troubleshooting directions from developer.android.com
For Ubuntu 13.10 (Saucy Salamander) and above, install the libncurses5:i386
, libstdc++6:i386
, and zlib1g:i386
packages using apt-get:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
For earlier versions of Ubuntu, install the ia32-libs
package using apt-get:
apt-get install ia32-libs
Hamy
2251 silver badge14 bronze badges
answered Nov 22, 2011 at 19:15
hoffmanchoffmanc
6511 gold badge4 silver badges4 bronze badges
4
sudo apt-get install --reinstall libc6-i386
is also need for me.
answered Apr 12, 2012 at 14:55
ShaweShawe
411 bronze badge
1
I was also seeing the same after switching my machine from 32 bit ubuntu to 64 bit. Bash would report ‘No such file or directory’ of files that clearly existed with the execute attribute.
sudo apt-get install —reinstall libc6-i386
Fixed the problem. These are the «GNU C Library: 32-bit shared libraries for AMD64»
Seems like this is a bug in bash. Note that I also changed the default shell from dash to bash using
sudo dpkg-reconfigure dash
before I tried running the 32 bit executable. So I’m not sure if the problem would have happened with the default dash shell
answered Jul 24, 2013 at 19:01
On a fresh Xubuntu 13.10 x64 install I got adb
to run with:
sudo apt-get install --reinstall libc6-i386
sudo apt-get install libstdc++6:i386
And also zlib1g:i386
to make aapt
work.
and if you still miss something use:
lld adb
answered Oct 21, 2013 at 1:49
StéphaneStéphane
2461 silver badge6 bronze badges
2
For adb make sure you have the SDK unpacked and have run the SDK Manager to fully populate the SDK. Additionally make sure you have the following installed:
A.) JDK 6 or better
B.) lib32stdc++6
C.) lib32ncurses5
hoffmanc was the closest to getting it right, I don’t really understand why the answer from Daniel Beck is marked as correct when it’s not even close and has nothing to do with the problem.
Incidentally, if you try to run a truly non-existant command (i.e.:
# fakecommand
you’ll get: fakecommand: command not found, whereas in your situation the output you are seeing is actually coming from adb even though it’s not very clear that is the case.
answered Apr 14, 2012 at 18:00
Justin BuserJustin Buser
1,23711 silver badges14 bronze badges
Ubunto seems to have some issues with LSB compatibility, so try this if you are on Ubunto
apt-get install lsb
Note that ldd will sort of show that all the libraries are there, but they are not.
usmp-vm-lamp01$ ldd lmgrd
linux-vdso.so.1 => (0x00007fffb33fe000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f10b0a48000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10b074c000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f10b0535000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10b0175000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f10aff71000)
/lib64/ld-lsb-x86-64.so.3 => /lib64/ld-linux-x86-64.so.2 (0x00007f10b0c67000)
usmp-vm-lamp01$ locate libpthread.so.0
/lib/x86_64-linux-gnu/libpthread.so.0
usmp-vm-lamp01$ locate libm.so.6
/lib/x86_64-linux-gnu/libm.so.6
usmp-vm-lamp01$ locate /lib64/ld-lsb-x86-64.so.3
usmp-vm-lamp01$
answered Jun 9, 2014 at 21:26
Mark LakataMark Lakata
8,0902 gold badges18 silver badges16 bronze badges
1
Unlike other operating systems such as Windows, Linux is an OS in which the majority of its tasks are performed using the Terminal. One of the major tasks that the Linux terminal performs is the execution of programs using commands. While attempting to execute any program through this method, the user may come across this very common error statement which is the “no such file or directory” issue.
This article will elaborate on the reasons that prompt the error “no such file or directory” and also provide possible solutions to fix it
How to Resolve the “no such file or directory”?
Since this is a very general error, there are a few different reasons that can invoke this issue on the system. All these reasons are discussed below in great detail.
Reason 1: Wrong File Name
The first and the most commonly occurring reason is caused by using incorrect spellings of the file name. For example, the mistake can be the incorrect spelling of a file. Below is an example of such a mistake:
$ bash sampl.sh
Solution: Check the File name and Path
In the example shown above, the bash file “sample.sh” is saved on the desktop. So, make sure that the error is not invoked by using the correct spellings and the correct path. Look at the following image where the name and path of the file are correct, and thus, the output is displayed:
$ bash sample.sh
Reason 2: Wrong File Format
The other most common cause behind this issue is that the file that is attempted to execute is in a different format than the operating system. Let’s take an example of this situation. The file that is executed using the command is a DOS file which is a script written for Windows. If this DOS file is executed in an Ubuntu system, the “no such file or directory” issue will be invoked.
Solution: Use the dos2unix Tool
There exists a very useful tool for exactly these types of scenarios. The dos2unix tool helps to convert a dos file to a script that can be read by the Ubuntu OS. The first step is to install the dos2unix tool using this command:
$ sudo apt install dos2unix
Once the tool is installed, convert the DOS file into an Ubuntu-compatible file using the following command:
$ dos2unix sample.dos
The system should be able to run the script file without the error being prompted after the conversion is complete.
Conclusion
The “no such file or directory” issue occurs when the name or the path of the executable file is entered incorrectly into the terminal. Another reason is that Ubuntu is not able to read the DOS script and if it is executed on the Ubuntu terminal, then the error is prompted. To fix these issues it needs to be made sure that the file path and file name are entered correctly into the terminal. The other fix is to install the dos2unix tool and convert the dos files format to run on Ubuntu. This article has demonstrated the reasons and the solutions to fix the error “no such file or directory”.
This error is usually thrown when you enter a path that does not exist. See -bash: cd: Desktop: No such file or directory.
But the $(ls -d -1dt — */ | head -n 1) is not wrong in the output. Thus the reason must be the different usage of sh and bash in that moment.
In my case, I had a docker container with that error when I accessed the folder with bash. The container was broken since I had force-closed it after docker-compose up
which did not work. After that, on the existing containers, I could only use sh, not bash. I found this because of OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused «exec: «bash»: executable file not found in $PATH»: unknown. I guess that bash is loaded later than sh, and that at an early error at the start of the container, only sh gets loaded.
That would fit since you are in the sh, which can be seen from >>. Using sh, everything will work as expected. But the expression gets solved by bash. Which is probably not loaded for whatever reason.
In docker, using docker-compose, I also had a similar error saying sh: 1: cd: can't cd to /root/MYPROJECT
. That could be solved by mounting the needed volumes in the services using
services:
host:
volumes:
- ~/MYPROJECT:/MYPROJECT # ~/path/on/host:/path/on/container
See Mount a volume in docker-compose. How is it done? and How to mount a host directory with docker-compose? or the official docs.
Наверняка библиотеки какому-то бинарнику не хватает. Воспользуйтесь ldd, чтобы узнать, какому.
Если ты говоришь, что это скрипт, то сделай:
Там должно быть что-то вроде:
И вот этого «/usr/bin/shell» он, видимо, найти не может.
И вот этого «/usr/bin/shell» он, видимо, найти не может.
самый распространённый случай: виндовый перевод стоки (lfcr) в конце этой первой строки.
это на хостингах всяких обычно бывает, где клиенты в виндовых блокнотах скрипты редактируют. А у топикстартера замена дистрибутива была. Скорее всего пути просто поменялись к интерпретатору.
При обновлении Дебиана меняются пути к интерпретаторам? Если только ТС что-то своё устанавливал.
Тебя по фотографии не лечили никогда?
Может скрипт запускается, в процессе пытается запустить что-то не существующее и на этом завершает работу.
Всем спасибо, особенно xsectorx, за мысль о «file». До меня доперло лишь сейчас, что мой скрипт работает, а сам бинарник собран под старое ядро. Хотя ошибка «файл не существует» несколько не на те мысли наводит. Придется скачать/собрать новый ADB.
Уберите пробелы в названиях папок и файлов.
сам бинарник собран под старое ядро. Хотя ошибка «файл не существует» несколько не на те мысли наводит.
ну а что ей писать, если нет нужного файла?
Уберите пробелы в названиях папок и файлов.
Источник
Содержание
- «No such file or directory» error when executing a binary
- 8 Answers 8
- Not the answer you’re looking for? Browse other questions tagged linux or ask your own question.
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
- Try to run the following command
- Исправление ошибок Linux
- Решение проблем Linux
- Проблемы с командами в терминале
- Проблемы в программах
- Проблемы с драйверами и ядром
- Проблемы с графической оболочкой
- Проблемы с диском и файловой системой
- Выводы
- No such file or directory при выполнении элементарного скрипта
- 1 ответ 1
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками ubuntu bash или задайте свой вопрос.
- Связанные
- Похожие
- Подписаться на ленту
«No such file or directory» error when executing a binary
I was installing a binary Linux application on Ubuntu 9.10 x86_64. The app shipped with an old version of gzip (1.2.4), that was compiled for a much older kernel:
I wasn’t able to execute this program. If I tried, this happened:
ldd was similarly unhappy with this binary:
I’m curious: What’s the most likely source of this problem? A corrupted file? Or a binary incompatibility due to being built for a much older ?
8 Answers 8
I was missing the /lib/ld-linux.so.2 file, which is needed to run 32-bit apps. The Ubuntu package that has this file is libc6-i386.
Old question, but hopefully this’ll help someone else.
In my case I was using a toolchain on Ubuntu 12.04 that was built on Ubuntu 10.04 (requires GCC 4.1 to build). As most of the libraries have moved to multiarch dirs, it couldn’t find ld.so. So, make a symlink for it.
Check required path:
If you’re on 32bit, it’ll be i386-linux-gnu and not x86_64-linux-gnu.
You get this error when you try to run a 32-bit build on your 64-bit Linux.
Also contrast what file had to say on the binary you tried (ie: 32-bit) with what you get for your /bin/gzip :
which is what I get on Ubuntu 9.10 for amd64 aka x86_64.
Edit: Your expanded post shows that as the readelf output also reflects a 32-bit build.
I think you’re x86-64 install does not have the i386 runtime linker. The ENOENT is probably due to the OS looking for something like /lib/ld.so.1 or similar. This is typically part of the 32-bit glibc runtime, and while I’m not directly familiar with Ubuntu, I would assume they have some sort of 32-bit compatibility package to install. Fortunately gzip only depends on the C library, so that’s probably all you’ll need to install.
I also had problems because my program interpreter was /lib/ld-linux.so.2 however it was on an embedded device, so I solved the problem by asking gcc to use ls-uClibc instead as follows:
Well another possible cause of this can be simple line break at end of each line and shebang line If you have been coding in windows IDE its possible that windows has added its own line break at the end of each line and when you try to run it on linux the line break cause problems
Not the answer you’re looking for? Browse other questions tagged linux or ask your own question.
Linked
Hot Network Questions
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.10.29.40598
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
Здравствуйте, уважаемые. Скачал btsync (у меня arm, по ссылке Linux ARM тут), положил в /usr/bin и не могу запустить:
Как так и что с этим делать?
P.S. Тоже самое происходит, если переместить исполняемый файл, например, в домашний каталог.
P.S.S. Debian Jessie, вот такая железка.
chmod +x точно не поможет?
apparmor, selinux, noexec?
такое бывает когда исполняемый файл например предназначенный для 32 битной архитектуры пытаются запустить в 64-битной системе
В общем, похоже-таки несовместимость архитектур. Придётся пересобирать из исходников. Источник: http://otvety.google.ru/otvety/thread?tid=1e74bf1617bdb4b6
Try to run the following command
I had the same issue on Cubieboard.
Try to run the following command:
На Debian 7.6.0 (Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux) столкнулся с той же проблемой. Для запуска 32-битного приложения может потребоваться пакет ia32-libs-i386. Дебиан по умолчанию не дает его установить из-за зависимостей. Решается таким образом:
Источник
Каждый пользователь, рано или поздно сталкивается с определенными проблемами в своей операционной системе Linux. Это может быть просто неправильное использование команд или их непонимание, так и такие серьезные ошибки Linux, как отсутствие драйверов, неработоспособность сервисов зависание системы и так далее.
Эта статья ориентирована в первую очередь на новичков, которые не знают, что делать когда их будут поджидать проблемы linux, мы дадим общую концепцию и попытаемся показать в какую сторону двигаться дальше. Мы рассмотрим исправление ошибок в linux как простых, так и более сложных. Но давайте сначала определим, какие проблемы linux будем рассматривать, разобьем их на категории:
Все это мы рассмотрим ниже, но сначала общее введение и немного теории.
Решение проблем Linux
Linux очень сильно отличается от WIndows, это заметно также при возникновении проблем Linux. Вот допустим, произошла ошибка в программе Windows, она полностью закрывается или выдает непонятное число с кодом ошибки и все, вы можете только догадываться или использовать поиск Google, чтобы понять что произошло. Но в Linux все совсем по-другому. Здесь каждая программа создает лог файлы, в которых мы можем при достаточном знании английского или даже без него, выяснить, что произошло. Более того, если программу запускать из терминала, то все ошибки linux и предупреждения мы увидим прямо в окне терминала. и сразу можно понять что нужно делать.
Причем вы сможете понять что произошло, даже не зная английского. Главным признаком ошибки есть слово ERROR (ошибка) или WARNING (предупреждение). Рассмотрим самые частые сообщения об ошибках:
Сообщения об ошибках, кроме терминала, мы можем найти в различных лог файлах, все они находятся в папке /var/log, мы рассматривали за какие программы отвечают определенные файлы в статье просмотр логов linux. Теперь же мы подробнее рассмотрим где и что искать если linux выдает ошибку.
Проблемы с командами в терминале
Обычно проблемы с командами в терминале возникают не из-за ошибки linux или потому, что разработчики что-то недоработали, а потому, что вы ввели что-то неправильно или предали не те что нужно опции.
Если были переданы не те опции, то, скорее всего, программа покажет вам справку, ознакомившись с которой вы сможете очень быстро понять в чем проблема. Также справку выдают множество команд если их запустить без параметров.
Если файла, которого вы передали в параметрах не существует, то вам будет об этом сказано соответствующим сообщением. Сообщения могут быть и более специфичные, в зависимости от ошибки, но в конце концов, вы можете воспользоваться переводчиком Google, чтобы понять смысл того, что хочет система.
Очень распространенной среди новичков ошибкой, есть no such file or directory при попытке выполнить файл, скачанный из интернета. Сразу кажется что это бред, ведь файл существует, но на самом деле оболочка ищет только файлы с флагом исполняемый, а поэтому пока вы не установите этот флаг для файла, он для оболочки существовать не будет.
Проблемы в программах
Если ни с того ни с сего закрывается или не так, как требуется работает, какая-нибудь графическая программа, решение проблем linux начинается из запуска ее через терминал. Для этого просто введите исполняемый файл программы и нажмите Enter. Обычно достаточно начать вводить имя программы с маленькой буквы и использовать автодополнение для завершения ввода названия.
Многие ошибки системы linux, связанные с графической оболочкой вы можете найти в файле
/.xsession-errors в вашей домашней директории. Если оболочка работает медленно, зависает или не работают другие программы, но в других логах причин этому нет, возможно, ответ находится именно в этом файле.
Также ошибки linux могут возникать не только в обычных программах но и в работающих в фоне сервисах. Но их тоже можно решить, чтобы посмотреть сообщения, генерируемые сервисом, запущенным с помощью systemd, просто наберите команду просмотра состояния сервиса:
$ sudo systemctl status имя_сервиса
Дальше вы знаете, что делать с этой ошибкой, главное что у вас есть зацепка, а дальше все можно решить, ну или почти все.
Здесь, как и всегда большинство ошибок связано с тем, что что-то не установлено, какого-то файла нет или к чему-то невозможно получить доступ, тогда решение проблем linux не вызовет много забот.
Проблемы с драйверами и ядром
Проблемы с драйверами, модулями ядра или прошивками могут вызвать много неприятностей во время загрузки системы. Это может быть просто медленная загрузка системы, неработоспособность определенных устройств неправильная работа видео или полная невозможность запустить графическую подсистему. Исправление ошибок Linux начинается с просмотра логов.
Вы можете посмотреть все сообщения ядра с момента начала загрузки, выполнив команду чтобы узнать какую linux выдает ошибку:
Чтобы иметь возможность удобно листать вывод можно выполнить:
Или сразу выбрать все ошибки:
sudo dmesg | grep error
Дальше будет очень просто понять какого драйвера не хватает, что система не может загрузить или что нужно установить. Если возникает ошибка ввода-вывода linux, то, скорее всего, драйвер несовместим с вашим устройством, в таком случае, может помочь обновление ядра, чтобы получить самую новую версию драйвера. В некоторых случаях ядро может само предложить вариант решения проблемы прямо в сообщении об ошибке вплоть до того какую команду выполнить или какой файл скачать. Если же нет, вы все еще можете воспользоваться поиском для решения своей проблемы linux.
Проблемы с графической оболочкой
Когда проблемы linux касаются графической оболочки, то решить их новичкам не так уж просто. Больше всего потому что доступен только терминал. Графическая оболочка может просто зависнуть или вовсе не запускаться, например, после обновления.
При проблемах с графической оболочкой вы можете всегда переключиться в режим терминала с помощью сочетания клавиш Ctrl+Alt+F1. Далее, вам нужно ввести логин и пароль, затем можете вводить команды терминала.
Посмотреть логи графической оболочки вы можете в том же файле
Если проблема наблюдается после обновления до новой версии, то можно очистить кеш и удалить папку с настройками, обычно это помогает.
Проблемы с диском и файловой системой
Если это случилось, вам, скорее всего, придется переключиться в режим терминала и удалить несколько файлов. Вы можете удалять файлы логов или кэша пакетного менеджера. Много файлов удалять не нужно, достаточно освободить несколько мегабайт, чтобы прекратились ошибки системы linux и нормально работала графическая оболочка, а затем уже в ней решать все проблемы linux.
Выводы
Теперь исправление ошибок Linux будет для вас немного проще. Ошибки системы linux довольно сложная тема и этой информации явно мало, если у вас остались вопросы или есть предложения по улучшению статьи пишите в комментариях!
Источник
No such file or directory при выполнении элементарного скрипта
под root выполняю скрипт fs.sh, находящийся в /var/
Помогите разобраться, почему скриптом не могу попасть в каталог, а если в консоли набрать cd / то прекрасно перехожу.
1 ответ 1
содержимое вашего скрипта:
видно, что строки оканчиваются двумя символами: rn (cr+lf).
а должны заканчиваться одним символом r (cr).
преобразовать файл можно, например, с помощью программы dos2unix (в популярных дистрибутивах операционной системы gnu/linux обычно входит в одноимённый пакет):
Всё ещё ищете ответ? Посмотрите другие вопросы с метками ubuntu bash или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.10.29.40598
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник
- Check Path and Interpreter to Solve the
bash: No such file or directory
Error in Linux Bash - Install Library Packages to Solve the
bash: No such file or directory
Error in Linux Bash - Use the
dos2unix
Command to Solve thebash: No such file or directory
Error in Linux Bash
Linux terminal allows you to execute programs. This article will explain how to execute files properly and solve the bash: No such file or directory
error in Linux Bash.
There are many code-related reasons why you get a bash: No such file or directory
error in Bash. We will explain the most common mistakes and ways to fix them.
Check Path and Interpreter to Solve the bash: No such file or directory
Error in Linux Bash
First, make sure you execute the program with the correct path. If you make a typo on the directory or file name, you will get this error or give the wrong path.
If you are executing the file with a relative path (../../file
), try executing with the absolute path (/path/to/file
) instead.
Another reason you might get this error could be that you are using the wrong interpreter. The first line in the code is called shebang (#!/bin/bash
).
It tells the operating system which shell to use to parse the file. If the shebang is not specified correctly, your program will not run.
Make sure the program uses the proper interpreter.
Install Library Packages to Solve the bash: No such file or directory
Error in Linux Bash
Missing libraries on your system can cause you to get the bash: No such file or directory
error. Examine the file with the file
command.
If the file is a 32-bit executable, you need some libraries to execute it on a 64-bit architecture OS. To solve this error in Ubuntu, add the i386
architecture with the dpkg
command, then install the necessary libraries.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
Use the dos2unix
Command to Solve the bash: No such file or directory
Error in Linux Bash
Unix operating systems use line feed ("n"
) as the end of the line, but Windows operating systems use carriage return and line feed ("rn"
). So if you try to execute a code written in Windows on Linux, you may get this error.
You must clear the carriage return characters to be able to execute the file.
The dos2unix
command-line tool is a DOS to Unix text file format converter and vice versa. You can use the dos2unix
tool to make your file Unix compatible.
Its usage is as follows.
The file will be converted to Unix format. You can now execute the file.
While we have explained the most common errors and solutions here, this error can have many code-related causes. You can solve this by choosing the solution that suits your application.
Содержание
- Нет такого файла или каталога
- linux / init.h: нет такого файла или каталога
- ТОП 10 сообщений об ошибках в Linux
- Ошибка: mkdir — Cannot Create Directory
- mkdir: cannot create directory – File exists
- Возможные решения проблем mkdir: cannot create directory
- Сценарий file exists
- Переименовать (или переместить) существующий файл
- Удалить существующий файл
- Ошибка Linux при загрузке разделяемых библиотек: невозможно открыть файл общих объектов: нет такого файла или каталога
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- LDCONFIG
- Dev-пакет или неправильная версия
- Местоположение библиотеки
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Ответ 15
- Ответ 16
- Ответ 17
- Ответ 18
Нет такого файла или каталога
Приветствую. Проблема такая — скачал игру (ее нет в репозиториях), распаковал, пытаюсь запустить — получаю
chmod +x cataclysm-tiles
Сделал естественно, не помогает.
Попробуй полный путь указать (/home/user/Downloads/cataclysmdda-0.B/cataclysm-tiles) или через cataclysm-launcher
Покажи еще вывод file cataclysm-tiles и uname -a.
Покажи еще вывод file cataclysm-tiles и uname -a.
Попробуй полный путь указать (/home/user/Downloads/cataclysmdda-0.B/cataclysm-tiles) или через cataclysm-launcher
Спасибо, помогло. Правда пришлось ставить кучу всего дополнительно, но заработало.
Ну да, я собственно это и имел в виду:
ELF 32-bit LSB executable
x86_64 x86_64 x86_64
Источник
linux / init.h: нет такого файла или каталога
Я пытаюсь создать модуль ядра для своего класса и получаю огромное количество ошибок, но в верхней части этой стены находится печально известная ошибка «Нет такого файла или каталога». Похоже, в этом корень проблемы. Похоже, что это влияет не только на init.h, но также на module.h и kernel.h. Первые три строки программы выглядят следующим образом:
Я осмотрелся и попробовал другие пути, где эти файлы должны быть при просмотре аналогичных проблем, но пока ничего не помогло. Самое странное, что я уже использовал этот модуль; Мне предоставили стартовый код, в котором это было вверху (я ничего не менял), и это не дало мне этой ошибки. Хотя, очевидно, что код после него другой, но это кажется самой большой проблемой на данный момент.
Полный код выглядит следующим образом:
- Где находится ваша копия и какой путь включения вы переходите к gcc?
- Вы можете разместить свой код? Вы используете Makefile из / lib / module?
- Что ж, мне нужно кое-что сообщить. Во-первых, похоже, что init.h и module.h исчезли. Далее я попытался исправить эту проблему, и все .. как-то пошло не так. Я попытался использовать команду «sudo apt-get install linux-headers-generic», и это дало мне сообщение об ошибке: «E: Пакет ‘linux-headers-generic’ не имеет кандидата на установку».
- Я не использую Makefile, о котором вы говорите, но он есть в каталоге модуля, который я пытаюсь запустить. Что касается публикации кода, между ними ОЧЕНЬ много заполнителей, которые не очень важны . Я буду работать над его размещением; У меня он работает на виртуальной машине.
Я думаю, вы должны сначала установить что-то вроде linux-headers- [версия ядра] с помощью apt-get, затем вы должны создать Makefile следующим образом:
установите для переменной KERNELDIR в Makefile соответствующую версию ядра, по умолчанию она использует ваше работающее ядро. Если вы используете этот Makefile, вам нужно изменить свой include на следующий формат:
Я думаю, что для разработки модуля ядра лучше использовать стандартное ядро от Linus Torvalds git. Для некоторых простых модулей ядра см. Это.
- Дело в том, что это для назначения, поэтому нам дали правильный make-файл для загрузки и помещения в правильный каталог (что я и сделал, поскольку он уже работал хотя бы один раз), и я попытался получить заголовки .. . это точный ввод, который мне нужно было ввести в терминал?
- нет, вы должны сначала использовать , чтобы получить версию ядра, а затем использовать что-то вроде , чтобы получить заголовок ядра для соответствующего выпуска.
- да, это не сработало. как и в комментариях выше, он не может найти то, что я пытаюсь установить
- Хорошо, пришлите мне свой результат в комментариях.
- Это действительно странно, теперь вроде как ни с того ни с сего работает. Я пытался сделать это до сегодняшней встречи с моим профессором, но не смог. Мы открыли его сегодня утром, запустили, конечно, получили кучу ошибок, но это не одна из них. Спасибо, что попробовали!
при сборке модулей ядра вы должны использовать make файлы
Источник
ТОП 10 сообщений об ошибках в Linux
Многие ошибки, которые вы встретите при выполнении команд системы Linux, являются результатом неправильных действий с файлами или процессами. Приведем распространенные сообщения об ошибках и разберем их.
No such file or directory
Вероятно, вы пытались получить доступ к несуществующему файлу. Поскольку ввод/вывод в системе Unix не делает различий между файлами и каталогами, это сообщение об ошибке появляется везде. Вы получите его, если попытаетесь выполнить чтение несуществующего файла, или решите перейти в отсутствующий каталог, или попробуете записать файл в несуществующий каталог и так далее.
File exists
В данном случае вы, возможно, пытались создать файл, который уже существует. Это часто бывает, когда вы создаете каталог, имя которого уже занято каким-либо файлом.
Not a directory, Is a directory
Эти сообщения возникают, когда вы пытаетесь использовать файл в качестве каталога или каталог в качестве файла. Например, так:
Обратите внимание на то, что сообщение об ошибке относится только к части a пути a/b. Когда вы столкнетесь с такой проблемой, вам потребуется время, чтобы отыскать компонент пути, с которым обращаются как с каталогом.
No space left on device
На вашем жестком диске закончилось свободное пространство.
Permission denied
Эта ошибка возникает, когда вы пытаетесь выполнить чтение или запись, указав файл или каталог, к которым вам не разрешен доступ (вы обладаете недостаточными правами). Эта ошибка говорит также о том, что вы пытаетесь запустить файл,для которого не установлен бит выполнения (даже если вы можете читать этот файл). Из раздела 2.17 вы больше узнаете о правах доступа.
Operation not permitted
Обычно такая ошибка возникает, когда вы пытаетесь завершить процесс, владельцем которого не являетесь.
Segmentation fault, Bus error
Суть ошибки сегментации состоит в том, что разработчик программы, которую вы только что запустили, где-то ошибся. Программа пыталась получить доступ к области памяти, к которой ей не разрешено обращаться, в результате операционная система завершила работу программы. Подобно ей, ошибка шины означает, что программа пыталась получить доступ к памяти не должным образом. Если вы получаете одну из этих ошибок, то, вероятно, вы передали на ввод программы какие-либо неожиданные для нее данные.
Источник
Ошибка: mkdir — Cannot Create Directory
Новички в Linux часто не понимают, что делать при получении ошибки “mkdir: cannot create directory” во время работы с командной строкой. Есть несколько причин возникновения такой ошибки, и в этом переводе своей англоязычной статьи с сайта Unix Tutorial я покажу эти причины и их устрание на примерах.
mkdir: cannot create directory – File exists
В переводе с английского сообщение означает: невозможно создать каталог — файл уже существует.
ФАЙЛ существует? А при чём тут проблема создания каталога? И почему ошибка говорить “существует файл”, когда мы вообще пытаемся создавать каталог, а не файл?
На самом деле всё просто: большинство объектов в Linux являются файлами и структурами в файловой системе. Поэтому эта ошибка означает, что там, где вы пытаетесь выполнить команду создания нового каталога, уже существует другой объект с таким же именем. В данном случае — это файл, а не каталог. Но у файла такое же имя, как у желаемого каталога, так что создать второй объект с таким же именем не получится.
намекает, что у нас уже есть файл с именем /tmp/try.
Очень просто проверить эту гипотезу с помощью команды ls:
Так и есть, у нас существует файл с таким именем.
Возможные решения проблем mkdir: cannot create directory
Сценарий file exists
Если файл с таким именем уже существует, а каталог всё же очень хочется создать, то есть решения.
Переименовать (или переместить) существующий файл
Используем команду mv для перемещения /tmp/try в другой каталог (или просто сменим имя try на другое, оставив файл в том же каталоге /tmp). Вот как можно переименовать файл в имя oldtry:
Теперь давайте попробуем ту же команду mkdir:
…и всё замечательно работает! Никаких ошибок, и создался новый каталог под названием /tmp/try. Подтверждаем это с помощью команды ls:
Удалить существующий файл
Ещё одна опция, которая напрашивается сама собой — можно просто удалить неугодный файл, который мешает созаднию нашего нового каталога.
Для этого примера создадим новый пустой файл с названием /tmp/newtry
Если попробовать mkdir, то получится ожидаемая ошибка:
А теперь мы просто удалим неугодный файл и попробуем mkdir снова:
В этот раз нет никаких ошибок, всё снова сработало:
##mkdir: cannot create directory – Permission denied
Это — ещё один распространённый сценарий при создании каталогов.
В переводе на русский, сообщение говорит: невозможно создать каталог — недостаточно прав доступа. То есть файлов с таким же именем нет, но текущий пользователь, под которым мы пытаемся создать каталог, не имеет прав в текущем месте файловой системы для создания новых каталогов (и файлов).
Основной подход к такой ошибке — проверка прав доступа в каталоге, где получена ошибка. Команда ls и здесь поможет. You should use ls command on the higher level directory to confirm permissions.
Все эти команды сработали без ошибок, и ls показывает, что у меня есть полные права доступа к каталогу try2018 — rwx для меня, rwx для моей группы и r-x для всех остальных (это я читаю фрагмент drwxrwxr-x в строке с try2018).
Теперь давайте уберём права на запись (и создание новых объектов) в каталоге try2018:
Теперь мои права к этому каталогу сменились с полных (rwx — read/write/execute) на только чтение (r-x — read/execute). Так что если я попробую создать в try2018 какой-то подкаталог, выйдет та самая ошибка про недостаток прав доступа:
Чтобы исправить проблему, нужно исправить права доступа на каталоге, где мы видим ошибку. И пробуем mkdir снова:
Вот теперь — порядок, всё создалось,
На сегодня — всё! Будут ещё вопросы по самым основам Linux — обращайтесь!
Источник
Ошибка Linux при загрузке разделяемых библиотек: невозможно открыть файл общих объектов: нет такого файла или каталога
Программа является частью набора тестов Xenomai, скомпилированного с ПК Linux в Linux + Xenomai ARM toolchain.
Изменить: ОК. Я не заметил, что .1 в конце был частью имени файла. Что это значит в любом случае?
ОТВЕТЫ
Ответ 1
Обновить
Хотя то, что я пишу ниже, верно в качестве общего ответа об общих библиотеках, я думаю, что наиболее частой причиной такого рода сообщений является то, что вы установили пакет, но не установили «-dev версию этого пакета».
Ну, это не вранье — в этом листинге нет libpthread_rt.so.1 . Вам, вероятно, нужно переконфигурировать и перестроить его так, чтобы оно зависело от имеющейся у вас библиотеки, или установить то, что предоставляет libpthread_rt.so.1 .
Как правило, числа после .so являются номерами версий, и вы часто обнаруживаете, что они являются символическими ссылками друг на друга, поэтому, если у вас есть версия 1.1 libfoo.so, у вас будет настоящий файл libfoo.so.1.0, и символические ссылки foo.so и foo.so.1, указывающие на libfoo.so.1.0. И если вы установите версию 1.1, не удаляя другую, у вас будет libfoo.so.1.1, а libfoo.so.1 и libfoo.so теперь будут указывать на новую, но любой код, для которого требуется эта точная версия, может используйте файл libfoo.so.1.0. Код, который опирается только на API версии 1, но не заботится, будет ли он 1.0 или 1.1, указывать libfoo.so.1. Как отметил Орип в комментариях, это хорошо объясняется на http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html.
В вашем случае, вы можете сойти с символической ссылки libpthread_rt.so.1 на libpthread_rt.so . Однако нет никаких гарантий, что это не нарушит ваш код и не поужинает на телевидении.
Ответ 2
Ваша библиотека является динамической библиотекой. Вы должны сообщить операционной системе, где она может найти его во время выполнения.
Для этого нам понадобятся следующие простые шаги:
(1) Найдите, где находится библиотека, если вы ее не знаете.
(2) Проверьте наличие переменной среды пути динамической библиотеки ( LD_LIBRARY_PATH )
если нечего отображать, добавьте значение пути по умолчанию (или нет, если хотите)
(3) Мы добавляем желаемый путь, экспортируем его и пробуем приложение.
Обратите внимание, что путь должен быть каталогом, в котором находится path.so.something . Так что если path.so.something находится в /my_library/path.so.something он должен быть:
Ответ 3
Вот несколько решений, которые вы можете попробовать:
LDCONFIG
Как отметил AbiusX: если вы только что установили библиотеку, вам просто нужно запустить ldconfig.
ldconfig создает необходимые ссылки и кеширует самые последние общие библиотеки, найденные в каталогах, указанных в команде line в файле /etc/ld.so.conf и в доверенных каталогах (/lib и /usr/lib ).
Обычно ваш менеджер пакетов позаботится об этом при установке новой библиотеки, но не всегда, и это не помешает запустить ldconfig, даже если это не ваша проблема.
Dev-пакет или неправильная версия
Если это не сработает, я также рассмотрю предложение Paul и поискать версию библиотеки «-dev». Многие библиотеки разделены на dev и non-dev пакеты. Вы можете использовать эту команду для поиска:
Это также может помочь, если у вас установлена неправильная версия установленной библиотеки. Некоторые библиотеки публикуются в разных версиях одновременно, например, Python.
Местоположение библиотеки
Если вы уверены, что установлен правильный пакет, а ldconfig его не нашел, он может быть просто нестандартным. По умолчанию ldconfig выглядит в /lib , /usr/lib и каталогах, перечисленных в /etc/ld.so.conf и $LD_LIBRARY_PATH . Если ваша библиотека находится где-то в другом месте, вы можете добавить каталог в свою строку в /etc/ld.so.conf , добавить путь библиотеки к $LD_LIBRARY_PATH или переместить библиотеку в /usr/lib . Затем запустите ldconfig .
Чтобы узнать, где находится библиотека, попробуйте следующее:
(Замените libraryname на имя вашей библиотеки)
Если вы перейдете по маршруту $LD_LIBRARY_PATH , вы захотите поместить его в свой файл
/.bashrc , чтобы он запускался каждый раз при входе в систему:
Ответ 4
У меня была аналогичная ошибка, я мог бы разрешить ее, указав
Надеюсь, это поможет.
Ответ 5
Вам необходимо убедиться, что вы указали путь к библиотеке во время связывание при компиляции вашего .c файла:
gcc -I/usr/local/include xxx.c -o xxx -L/usr/local/lib -Wl, -R/USR/локальные/Библиотека
Часть -Wl, -R сообщает полученному двоичному файлу также искать библиотеку в /usr/local/lib во время выполнения, прежде чем пытаться использовать его в /usr/lib/
Надеюсь, это поможет вам.
Ответ 6
Страница ссылки linux.org объясняет механику, но не объясняет мотивацию: — (
Кроме того, обратите внимание, что «внешнее управление версиями» в значительной степени устарело в Linux, поскольку управление версиями символов (расширение GNU) позволяет вам иметь несколько несовместимых версий одной и той же функции в одной библиотеке. Это расширение позволило glibc иметь ту же внешнюю версию: libc.so.6 за последние 10 лет.
Ответ 7
Попробуйте добавить LD_LIBRARY_PATH , который указывает пути поиска, в ваш файл
Ответ 8
добавить эти строки в конец
Ответ 9
Другое возможное решение в зависимости от вашей ситуации.
Если вы знаете, что libpthread_rt.so.1 совпадает с libpthread_rt.so, вы можете создать символическую ссылку:
Затем ls -l /lib должен теперь показать символическую ссылку и то, на что она указывает.
Ответ 10
У меня была эта ошибка при запуске моего приложения с Eclipse CDT в Linux x86.
Чтобы исправить это:
Выполнить как → Выполнить настройки → Среда
Ответ 11
У меня была похожая ошибка, и она не устранилась с выдачей LD_LIBRARY_PATH в
/.bashrc. Что решило мою проблему, добавив файл .conf и загрузив его. Перейти к терминалу и быть в Су.
Добавьте путь к вашей библиотеке в этом файле и сохраните его (например,/usr/local/lib). Вы должны выполнить следующую команду, чтобы активировать путь:
Проверьте ваш новый путь к библиотеке:
Если это показывает ваши файлы библиотеки, то вы готовы.
Ответ 12
попробуйте установить sudo lib32z1
Ответ 13
Все, что мне нужно было сделать, было запущено:
Я был в папке, расположенной в /usr/lib/x86_64-linux-gnu , и работал отлично.
Ответ 14
Если вы запускаете приложение в Microsoft Windows, путь к динамическим библиотекам (DLL) должен быть определен в переменной среды PATH.
Если вы запускаете приложение в UNIX, путь к динамическим библиотекам (.so) должен быть определен в переменной среды LD_LIBRARY_PATH.
Ответ 15
Произошла ошибка, поскольку система не может сослаться на упомянутый файл библиотеки. Сделайте следующие шаги:
- При запуске locate libpthread_rt.so.1 будет locate libpthread_rt.so.1 путь ко всем файлам с этим именем. Предположим, что путь это /home/user/loc .
- Скопируйте путь и запустите cd home/USERNAME . Замените USERNAME на имя текущего активного пользователя, с которым вы хотите запустить файл.
- Запустите vi.bash_profile и в конце параметра LD_LIBRARY_PATH , прямо перед . , добавьте строку /lib://home/usr/loc:. , Сохраните файл.
- Закройте терминал и перезапустите приложение. Это должно бежать.
Ответ 16
Я получил эту ошибку, и я думаю, что это та же самая причина, по которой вы
Попробуй это. Исправьте права на файлы:
«sudo su», чтобы получить разрешения для вашей файловой системы.
Ответ 17
Я получил эту ошибку, и я думаю, что это та же самая причина, по которой вы
ошибка при загрузке общих библиотек: libnw.so: невозможно открыть файл общего объекта: такого файла или каталога нет
Попробуй это. Исправьте права на файлы:
Ответ 18
похожая проблема найдена здесь: https://bugzilla.redhat.com/show_bug.cgi?id=1456202 Я пробовал упомянутое решение, и оно на самом деле работает.
Решения в предыдущих вопросах могут работать. Но я думаю, что это простой способ исправить это. Попробуйте переустановить пакет libwbclient в fedora:
Источник