我正在尝试将一个带有用户界面的程序编译为 .out 文件。我之前用同样的方法编译了它,并且没有编辑代码,而是使用了这个
`pkg-config --cflags --libs gtk+-2.0`
在 16.04 中,代码编译成应用程序,我可以双击并启动该应用程序。这次,我不能。当我双击时,它会尝试使用 glade 打开并显示错误。出于某种原因,编译器或系统认为该文件应该是一个共享库。我怎么知道它是一个应用程序?我必须在终端中执行它,就像非 gtk 编译的 C 文件一样。
我如何在 18.04 上将其编译为应用程序?
答案1
从 Ubuntu 中的 gcc-6.2 开始,gcc 配置了 --enable-default-pie 选项(位置独立可执行文件),这就是它是一个共享对象的原因。(- LSB 共享对象
编译器重写此代码-fno-pie
,链接器重写此代码-no-pie
显然,对于 a.out 文件,您只需应用链接器 -no-pie,尽管这两个选项一起使用也可以。
另一个因素可能是您的文件管理器,有些会允许将共享对象标记为可执行文件并运行。Nautilus 不再允许。(Nemo 允许