【问题标题】:library location for project项目的图书馆位置
【发布时间】:2010-09-20 19:34:43
【问题描述】:

我已经为 linux 启动了一个 C++ SFML 项目。我想知道.so应该去哪里。 他们是否应该进入项目文件夹,以便用户在获得程序后可以简单地运行程序?或者用户在运行我的程序之前是否应该在 linux 机器上安装 SFML 库?

【问题讨论】:

    标签: c++ project-management sfml


    【解决方案1】:

    即使您确实包含了.so 文件,您也无法保证用户能够运行它(不同的体系结构、链接到不同 libc 的库,...)。静态链接,或者更好的是,让他们自己提供支持库。

    @Joel J. Adamson 对使用 autoconf 的回答是个好主意。 SFML 不附带pkg-config 文件,因此您将按如下方式检查 SFML:

    dnl Checking for a C++ compiler
    AC_PROG_CXX
    
    dnl Checking C++ features. This tells configure to use the C++ compiler for checks.
    AC_LANG_PUSH([C++])
    dnl Check for a SFML header.
    AC_CHECK_HEADER([SFML/Config.hpp], [], [AC_MSG_ERROR([SFML headers not found.])])
    AC_LANG_POP([C++])
    

    由于名称修改等原因,检查库有点困难。 Tyler McHenry 在这部分写了good article,如果你想彻底了解的话。

    【讨论】:

      【解决方案2】:

      在分发级别,SFML 将是一个依赖项,即用户必须在编译程序之前安装它(或者他们的包管理器必须安装它)。如果用户想要编译它,他们还需要头文件(通常有一个单独的“开发”包要安装)。您不必分发 .so 文件,如果您不这样做(对所有人)可能会更好。

      您需要检查用户是否拥有它,例如使用autoconf,您需要在configure.ac 中检查应用程序项目的相关标题。例如,要检查数学库,因为我使用的是exp() 函数,所以我将使用

      AC_CHECK_LIB([m], [exp])
      

      configure 步骤中创建检查。幸运的是autoscan 可以为您检查并创建一个名为configure.scan 的骨架configure.ac 文件。另见Cmake

      HTH。

      【讨论】:

        【解决方案3】:

        您应该使您的程序依赖于它需要的特定库(和版本)。如果您打算将其打包到 rpm/deb 文件中,您也应该在其中添加依赖项,以便包管理器可以检查和应用它(例如 apt 可以安装给定包的所有依赖包)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-05
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          • 1970-01-01
          • 2012-11-09
          • 2012-06-14
          • 1970-01-01
          相关资源
          最近更新 更多