项目的图书馆位置

时间:2010-09-20 19:34:43

标签: c++ project-management sfml

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

3 个答案:

答案 0 :(得分:2)

即使您确实包含了.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

答案 1 :(得分:1)

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

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

AC_CHECK_LIB([m], [exp])

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

HTH。

答案 2 :(得分:0)

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