在 Linux 中编译 Unix 应用程序

在 Linux 中编译 Unix 应用程序

显然,Unix 和 Linux 的底层操作系统有相似之处。

是否有原因导致编译 Makefile 在 Linux 操作系统上无法编译,而在 FreeBSD 或 OSX 操作系统上无法编译?

例如,安装以下应用程序可以在 FreeBSD 操作系统上成功编译,但无法在 CentOS 或 Ubuntu 上编译。

http://www.superscript.com/trigger/install.html

Linux 操作系统中是否缺少需要构建此特定 Makefile 的库或内核头文件?

这是供参考的 Makefile: https://github.com/SuperScript/trigger/blob/master/src/Makefile

这是我尝试package\compile在 Linux 机器上运行时得到的结果。

# package/compile
sh makefile.build default.build load load
makefile.build: line 30: .: default.build: file not found
sh makefile.build default.build systype systype
makefile.build: line 30: .: default.build: file not found
sh makefile.build default.build compile compile
makefile.build: line 30: .: default.build: file not found
sh makefile.build default.o.build trigger-pull.o trigger-pull
makefile.build: line 30: .: default.o.build: file not found

答案1

查看了该软件包使用的各种独特的构建脚本后,它似乎是为 shell 编写的,/bin/sh默认情况下允许.命令(source在 shell 中bash)从当前目录读取和运行点脚本,即使脚本的路径未明确给出,并且当前目录不在 in $PATH(或者开发人员假设您有.in $PATH,而您通常没有也不应该有)。

解决这个问题的方法是修补src/makefile.build脚本,以便build_do第 29 行的 shell函数

build_do() {
  ( . ./"$build_it_cmds" "$1" "$2" "$3" > "$3" )
}

注意添加的./.

然后您可能还应该向项目提交有关此问题的错误报告。幸运的是,使用 GitHub 可以非常容易地做到这一点,尽管我看到这个项目自 2012 年以来就没有进行任何开发,所以我不知道它是否已经死了。

相关内容