我已经为linux启动了一个C ++ SFML项目。我想知道.so应该去哪里。 它们应该进入项目文件夹,以便用户在获得程序后可以简单地运行程序吗?或者用户是否应该在运行我的程序之前在linux机器上安装SFML库?
答案 0 :(得分:2)
即使您确实包含了.so
文件,也无法保证用户能够运行它(不同的体系结构,链接到不同libc的库,......)。要么静态链接,要么更好,只要让它们自己提供支持库。
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可以安装给定包的所有依赖包)。