Linux,C ++,ThirdParty库

时间:2016-09-05 07:24:29

标签: c++ linux sdl glew

好的只是一个简单的问题。我在Windows上使用Visual C ++进行编程,并且为了学习目的已经更改为Ubuntu并在Code :: Blocks,CodeLite和Eclipse中启动。我使用SDL2GLEW编写了一些简单的程序,以基于SDL2窗口创建一个简单的OpenGL应用程序。我用命令下载了库:

  

sudo apt-get install ...

我的主要问题是:由于此应用程序依赖于外部库(SDL2glewfluOIS),因此它不适用于其他Linux电脑。使用终端命令安装所有这些库后,程序将无法执行。我的问题是,是否可以构建不需要安装这些库的程序。例如,在Windows上,您将程序链接到SDL2.lib并在SDL2.dll文件夹中包含.exe。我怎么能在linux上做到这一点。我对linux编程以及工作原理的经验很少,所以我希望这只是一个基本问题。 :)

3 个答案:

答案 0 :(得分:18)

在Linux中,等同于dll文件的是.so个文件。所以你需要随身携带它们。

您还可以静态链接库。那些应该是.a的结尾。有了这些,他们就会被直接汇编到你的程序中,你不需要提供这些。

更高级(类似Linux)的方法:

通常在Linux(现在作为Debian / Ubuntu的例子)中创建一个包(如果是debian .deb - file - debian包)。在这些包中,您可以添加元信息,例如它所依赖的其他包(这些包可以通过apt-get安装)。

当您使用dpkg手动安装软件包时,它会告诉您缺少依赖项,您可以使用apt-get -f install修复这些依赖项。您还可以创建自己的apt存储库,它将使用仅apt-get install ...

的依赖项安装程序

其他Linux发行版有其他包管理系统。这只是debian / ubuntu的一个例子。

答案 1 :(得分:5)

结合Hayt的好答案,我认为值得一提的是,“经典”UNIX方法将是“开箱即用”的解决方案。含义:您实际上指定了程序编译所需的“外部”依赖项;你基本上让人们只需下载一些源档案;提取后......运行

./configure
make
make install

或类似他们系统上的东西。

在这种情况下,“configure”工具会检查所有必需的依赖项。有关详细信息,请参阅here

现在分发DEB,RPM,...包更为常见;但是能够从某个地方下载一些sources.tar.gz有一定的美感;运行这三个命令,并在几分钟内基于本地编译进行工作安装。特别是当您的用户可能希望对源代码进行更改时。但是,当然,这需要更多的思考 - 因为你想尽可能地限制你的“依赖”;换句话说:你想尽可能“标准化”。

答案 2 :(得分:2)

使应用程序易于安装的一种方法是打包它(假设Ubuntu在这里)。假设您构建了名为foobar的应用程序。创建以下目录结构:

foobar_1.0/
|-- usr/local/bin
|             `-- foobar
`-- DEBIAN/
    `--  control

并将以下文本放在DEBIAN/control文件中:

Package: foobar
Version: 1.0
Section: games
Priority: optional
Architecture: i386
Depends: libsdl2, libglew1.10, anotherLibrary, yetAnotherOne
Maintainer: Your Name <you@email.com>
Description: A neat package which does foo and bar

现在您可以使用

构建包
dpkg-deb --build foobar_1.0

然后,您的用户必须使用foobar安装dpkg -i foobar_1.0.debfoobar会在/usr/local/bin中安装/usr/bin。此目录专用于您从源构建的软件或从非官方软件包安装的软件,以避免DEBIAN/control(官方软件包中的二进制文件)中可能存在的名称冲突。

如果您的用户遗漏了您在apt-get -f install中列出的任何依赖关系,他们会在安装时告知它。只需运行foobar即可安装它们。删除div { max-width: 200px; border: dashed 1px grey; } div.flex { display: flex; flex-flow:row wrap; } h3 { display: inline; font-size: 1.6em; border-bottom: 4px solid green; }也会将这些依赖项标记为未使用,因此系统会在用户卸载程序包时将其删除。