如何编译C++项目(使用g++)以便在其他计算机上使用
How can I compile a C++ project (with g++) to use on other computers?
这可能很明显,但我想在做任何皮疹之前确定该做什么。我想把我的C++程序、库等等编译成一个可执行版本,这样这个文件就可以在任何计算机上运行(运行相同的操作系统)。现在,我在Mac OS X(10.7.4)上,我需要能够在其他Mac上运行我的可执行文件。问题是我在我的项目中使用OpenCV库,而我只在这台计算机上安装了它。有没有一种方法可以用g++编译,这样如果我在没有安装OpenCV库的计算机上打开这个程序,它无论如何都能工作?与中一样,将所有依赖项构建到可执行文件中。或者这是自动发生的?
我对".o"对象文件也很陌生,所以这些文件与它有什么关系吗?我更喜欢一种将所有内容放在一个文件中的方法,但只要它有效,我就会接受一个包。
谢谢。
要扩展molbdnilo的答案,您需要创建一个应用程序捆绑包(请参阅Apple捆绑包编程指南)。您需要将控制台应用程序移动到MyApp.app/Contents/MacOS/MyApp
。还有一个Frameworks目录,您需要在其中添加OpenCV库作为框架。有关OpenCV框架的一些信息,请参阅OpenCV Wiki。框架(最简单地说)相当于一个动态库,它被封装在一个特定的目录结构中。
我建议考虑在mac上使用Xcode
,因为与通过脚本和Makefile自己做相比,它简化了捆绑包的构建和与框架的链接。
有两种方法可以做到这一点。如果你不想在链接到的任何库中遇到许可证问题,你可以进行静态链接。使用g++ -o myApp -static -lopencv myapp.cpp
可以很容易地处理这一问题。然而,这也取决于你想要链接到的库中现有的静态库。如今,大多数使用共享库来分发静态库。
另一种方法是分发共享库,并告诉您的应用程序强制它使用-rpath
在某个位置查找共享库。注意:我告诉你Linux的方法,它可能会在Mac上工作,但我没有办法测试。
假设所有共享库都与可执行文件位于同一目录中,则可以使用:g++ -rpath ./ -lopencv -o YourApp yourApp.cpp
进行编译
我希望这能有所帮助。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- QT.如何使用QTNetwork在网络上查看其他计算机
- Visual C 程序不在其他计算机中运行
- 在其他计算机 MVCP100d 中打开 EXE 需要什么文件
- 将 c++ 游戏部署到其他窗口计算机
- ShellExecute 不适用于其他计算机
- C++-发送的请求未到达其他计算机
- struct-statc++未在其他计算机中编译
- 将我的DirectX应用程序移植到其他计算机
- Visual C++2010-将项目复制到其他计算机后出现多个未解决的外部错误