【发布时间】:2019-03-05 18:09:02
【问题描述】:
我有一个 bash 脚本,它可以在旧版本的 Ubuntu(14.04.x 和 16.04.x)上编译程序,而不是在上一个版本(18.04.x)和其他发行版(Arch、CentOS、Debian、Fedora)上等),因此...具有不同的 gcc 设置。
然后,要获得可以通过双击启动(以及其他方式)的可执行文件,我必须使用旧版本的 gcc 设置(Ubuntu 14.04.x 和 16.04 .x)当我必须为新版本的 gcc 7.3 设置(在 Ubuntu 18.04.x 上)使用此选项“=no-pie”时。
问题在于,在最新的 Ubuntu 版本 (18.04.x) 及其衍生版本(Kubuntu、Xbuntu 等,可能还有其他发行版)中,gcc (7.3) 的新配置具有选项“--enable- default-pie”,如果我在没有选项“-no-pie”的情况下编译我的程序,结果是创建的文件是一个可执行文件,它是“共享库”类型的,不能通过双击启动。
我的问题是:
a) 是否有一个命令可以让我从 bash 脚本中确定 gcc 是否配置了“--enable-default-pie”设置?
b) 如果没有,是否有一个命令可以让我从 bash 脚本中确定编译的文件是“共享库”还是“可执行”类型?
对于第二个选项,解决方案可能是如何将“gcc -v”的响应保存在 .txt 文件中并检查是否有“--enable-default-pie”字符串,但我绝对没有提示如何做到这一点。
如果我的第一个选项没有答案,第二个选项(它确实不那么优雅但同样有效)将允许我先编译我的程序而不使用“-no-pie”选项,然后检查这样一个创建的可执行文件的状态,如果结果是一个“共享库”,这次使用选项“-no-pie”重新启动这个编译,在一种情况下,在另一种情况下,获得一个可执行文件,可以通过双击 gcc 的任何设置。
提前感谢您的时间、想法和建议。
最好的问候。
【问题讨论】:
-
什么你没有检测到 gcc 的版本并相应地调整标志?
-
嗨 OznOg,Anti 刚刚在我正在寻找的回复下方发给我。感谢您的宝贵时间和最诚挚的问候。