使用gcc从终端编译一个C程序,用于较旧的OSX版本

使用gcc从终端编译一个C程序,用于较旧的OSX版本,c,gcc,terminal,osx-mountain-lion,osx-mavericks,C,Gcc,Terminal,Osx Mountain Lion,Osx Mavericks,我在OSX10.9.2(Mavericks)上编写了一段C代码,并通过链接所需的库(如-lm-lfftw3等),使用terminal的gcc编译器进行编译。它在我的计算机和另一台运行相同操作系统的计算机(也有所需的库)上运行良好,但当我尝试在另一台运行OS X 10.8(Mountain Lion)的计算机上运行可执行文件时,它不起作用。我没有尝试在运行OS X 10.8(Mountain Lion)的计算机上重新编译,因为它没有安装所需的库。如何在我的计算机(运行OS X 10.9.2(Mav

我在OSX10.9.2(Mavericks)上编写了一段C代码,并通过链接所需的库(如-lm-lfftw3等),使用terminal的gcc编译器进行编译。它在我的计算机和另一台运行相同操作系统的计算机(也有所需的库)上运行良好,但当我尝试在另一台运行OS X 10.8(Mountain Lion)的计算机上运行可执行文件时,它不起作用。我没有尝试在运行OS X 10.8(Mountain Lion)的计算机上重新编译,因为它没有安装所需的库。如何在我的计算机(运行OS X 10.9.2(Mavericks))上仅使用终端创建一个新的可执行文件,以便它在可能从未安装所需库的任何以前版本的操作系统上工作


谢谢。

解决此问题有三种方法:

  • 将所有依赖项静态链接到二进制文件中。
    • 这将在您的最终应用程序中包含一个库的副本,使其更大,但更独立
  • 创建依赖项的动态构建并将其部署到目标系统上。
    • libm
      (数学库)通常存在于所有系统上,因此它就像
      libfftw3
      和其他需要重建的库一样
    • 这可以通过构建源代码或使用macports安装所需的库来实现
  • 为远程端运行应用程序提供备用环境(即:在其中运行Mavericks的虚拟机)

编辑:

为了响应您的命令,在
libfftw3
的情况下,您可以通过替换以下行强制XCode目标的依赖项的静态链接:

-lfftw3
与:

对您的目标链接所针对的所有库重复此操作,然后设置。最终的应用程序二进制文件可能会更大,但完全是自包含的

参考文献:


  • 强制静态链接链接到Xcode target?的库,访问日期2014-03-14
  • 为之前的OS X版本编译C程序,访问日期2014-03-14

  • 静态链接它,使任何必要的外部库成为二进制文件的一部分。你必须确保这些库位于另一台计算机上-从你的问题来看,我认为这是问题所在,而不是OSXversion@MarcB:你能给我举个例子说明我是如何做到这一点的吗(即静态链接)?感谢sgcc-static创建一个静态二进制文件。它可能不起作用,有时您实际上无法获得库的静态版本。请您给我指一个链接,该链接指示我如何在最终应用程序中包含库的副本?我的目标是在我的计算机上创建一个可执行文件(或多个可执行文件,如果需要的话),以便在运行旧版本Mac OS且未安装libfftw3和libaiff(我正在使用的另外两个库)的其他计算机上运行。谢谢。您是如何构建应用程序的?它是严格地来自命令行,还是使用makefile(如果是的话,gnumake、AutoMake、CMake),还是在IDE(Eclipse、XCode等)中?请查看我发布的这个备选问题。我有你在那里寻找的答案。我感谢你的答复。我要试试这个。谢谢
    -l/full/path/to/libfftw3.a