【发布时间】:2010-09-20 19:34:43
【问题描述】:
我已经为 linux 启动了一个 C++ SFML 项目。我想知道.so应该去哪里。 他们是否应该进入项目文件夹,以便用户在获得程序后可以简单地运行程序?或者用户在运行我的程序之前是否应该在 linux 机器上安装 SFML 库?
【问题讨论】:
标签: c++ project-management sfml
我已经为 linux 启动了一个 C++ SFML 项目。我想知道.so应该去哪里。 他们是否应该进入项目文件夹,以便用户在获得程序后可以简单地运行程序?或者用户在运行我的程序之前是否应该在 linux 机器上安装 SFML 库?
【问题讨论】:
标签: c++ project-management sfml
即使您确实包含了.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,如果你想彻底了解的话。
【讨论】:
在分发级别,SFML 将是一个依赖项,即用户必须在编译程序之前安装它(或者他们的包管理器必须安装它)。如果用户想要编译它,他们还需要头文件(通常有一个单独的“开发”包要安装)。您不必分发 .so 文件,如果您不这样做(对所有人)可能会更好。
您需要检查用户是否拥有它,例如使用autoconf,您需要在configure.ac 中检查应用程序项目的相关标题。例如,要检查数学库,因为我使用的是exp() 函数,所以我将使用
AC_CHECK_LIB([m], [exp])
在configure 步骤中创建检查。幸运的是autoscan 可以为您检查并创建一个名为configure.scan 的骨架configure.ac 文件。另见Cmake。
HTH。
【讨论】:
您应该使您的程序依赖于它需要的特定库(和版本)。如果您打算将其打包到 rpm/deb 文件中,您也应该在其中添加依赖项,以便包管理器可以检查和应用它(例如 apt 可以安装给定包的所有依赖包)
【讨论】: