Ubuntu 18.04下无法通过Nautilus运行编译生成的可执行文件
解决Nautilus将可执行文件识别为共享库的问题
嘿,我来帮你搞定这个头疼的问题!从你提供的信息来看,编译出来的asdff确实是合法的可执行文件(权限0755,文件系统也没有noexec限制),终端能运行就证明这一点。Nautilus误识别的原因大概率是文件类型关联逻辑或者无后缀文件名导致的识别偏差,下面给你几个可行的解决方案:
1. 给可执行文件添加标准后缀
最简单的办法就是编译时给输出文件加上.run后缀,让Nautilus直接识别为可执行程序:
g++ test.cpp -o test.run
这样双击文件时,Nautilus会直接弹出“运行”/“在终端中运行”的选项,不会再当成共享库。
2. 修复桌面条目(Desktop Entry)
你提供的桌面条目有个小错误:Exec字段的路径写法不对。./home/...是相对路径的错误用法,应该用绝对路径。修改后的正确桌面条目如下:
[Desktop Entry] Type=Application Encoding=UTF-8 Name=asdff Exec=/home/miguel/Desktop/asdff Icon=/home/miguel/Desktop/index.png Terminal=true # 如果你的程序需要终端输出,设为true;不需要则设为false
保存为asdff.desktop后,记得给它加上可执行权限:
chmod +x asdff.desktop
现在双击这个桌面文件就能正常运行你的程序了。
3. 手动设置Nautilus的默认打开方式
如果不想改文件名或创建桌面文件,可以直接在Nautilus里调整关联:
- 右键点击你的可执行文件(比如
asdff),选择属性 - 切换到打开方式标签页
- 在列表里找到在终端中运行(或者运行软件,根据你的需求选择)
- 点击设为默认
这样下次双击文件时,Nautilus就会用正确的方式打开它,不会再弹出选择程序的窗口。
最后,你可以用file asdff命令验证一下文件类型,正常输出应该类似:
asdff: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=xxxxxx, not stripped
如果显示的是shared object那才是编译问题,但从你的描述看终端能运行,所以肯定是可执行文件,只是Nautilus的识别问题~
内容的提问来源于stack exchange,提问作者Mynlok
相关产品推荐
相关产品推荐

