Linux,C++,ThirdParty库

Pus*_*uso 15 c++ linux glew sdl

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

sudo apt-get install ...

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

Hay*_*ayt 18

在Linux中,相当于dll文件的是.so文件.所以你需要随身携带它们.

您还可以静态链接库.这应该是结束.a.有了这些,他们可以直接编译到你的程序中,你不需要提供这些.

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

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

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

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

  • @Hayt运送一个不同的VC_redistributable是一个相对简单(虽然有点烦人)的问题,这是很好的支持.将不兼容的GLIBC版本发送到外国发行版不是.虽然我同意这两个平台在发布二进制文件时都有他们的怪癖,但我仍然认为Linux在这方面要处理起来要困难得多.(这不是打算抨击Linux;它处理这些东西的理念也有很多优点.) (3认同)

Gho*_*ica 5

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

./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

或者类似于他们系统的东西.

在这种情况下,"configure"工具会检查所有必需的依赖项.请参阅此处以进一步阅读

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

  • 您必须检查第三方库的许可证.这取决于您如何链接它们.例如,当你有商业利益等时,你只能动态地链接它们.所以你可能无法静态链接.如果你想在linux和windows上构建,我也可以为你推荐`cmake`. (2认同)
  • @Puso两件事:避免在评论中进入"讨论"模式.并且:关于"推荐"的问题完全不在本网站上.转到您最喜欢的搜索引擎; 我相信一个人期待着你在这里描述的事情......将能够找到适合他需要的cmake信息!只需下载东西,并查看thigns. (2认同)