2010-09-20 63 views
1

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

回答

1

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

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

AC_CHECK_LIB([m], [exp]) 

创建期间configure步骤检查。幸运的是autoscan可以检查这个给你,并创建一个框架configure.ac文件configure.scan。另见Cmake

HTH。

0

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

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++]) 

检查库是因为名字改编等的有点难度。泰勒麦克亨利在这一部分写了一个good article,如果你想彻底。