这可能是显而易见的,但我想在做任何事情之前确定要做什么。我想将我的C ++程序,库和所有文件编译成一个可执行文件,以便该文件可以在任何计算机上运行(运行相同的操作系统)。现在,我在Mac OS X(10.7.4)上,我需要能够在其他Mac上运行我的可执行文件。问题是我在我的项目中使用OpenCV库,我只在这台计算机上安装了它。有没有办法用g ++编译,如果我在没有安装OpenCV库的计算机上打开这个程序,它还能工作吗?在中,将所有依赖项构建到可执行文件中。或者这是自动发生的吗?
我对“.o”目标文件也很陌生,所以那些与它有关吗?我希望有一种方法可以将它全部整合到一个文件中,但只要它有效,我就会满足于它。
谢谢。
答案 0 :(得分:1)
要扩展molbdnilo的答案,您需要创建一个应用程序包(请参阅Apple Bundle Programming guide)。您需要将控制台应用程序移动到MyApp.app/Contents/MacOS/MyApp
。还有一个Frameworks目录,您需要在其中添加OpenCV库作为框架。有关OpenCV框架的一些信息,请参阅OpenCV Wiki。一个框架(最简单的)几乎是一个包含在特定目录结构中的动态库。
我建议在Mac上使用Xcode
,因为与通过脚本和Makefile自行完成相比,它简化了bundle的构建和链接到框架。
答案 1 :(得分:0)
有两种方法可以做到这一点。如果您不打算与链接到的任何库发生许可问题,则可以使用静态链接。使用g++ -o myApp -static -lopencv myapp.cpp
可以很容易地处理这个问题。但是,这也取决于您要链接到的库的现有静态库。目前,大多数人使用共享库分发静态库。
另一种方法是分发共享库并告诉应用程序强制它使用-rpath
在共享库的某个位置查找。注意:我告诉你Linux的方法,它可能适用于Mac,但我没办法测试。
所以说所有共享库都与可执行文件位于同一目录中,您可以使用以下代码进行编译:{{1}}
我希望这会有所帮助。