2

这可能很明显,但我想在我做任何轻率的事情之前确定要做什么。我想将我的 C++ 程序、库和所有内容编译为发布可执行文件,以便该文件可以在任何计算机上运行(运行相同的操作系统)。现在,我在 Mac OS X (10.7.4) 上,我需要能够在其他 Mac 上运行我的可执行文件。问题是我在我的项目中使用 OpenCV 库,而我只在这台计算机上安装了它。有没有办法用 g++ 编译,如果我在没有安装 OpenCV 库的计算机上打开这个程序,它仍然可以工作?如,将所有依赖项构建到可执行文件中。或者这会自动发生吗?

我对“.o”目标文件也很陌生,那么这些与它有什么关系吗?我更喜欢将它全部放入一个文件的方法,但只要它有效,我就会接受一个包。

谢谢你。

4

2 回答 2

1

要扩展 molbdnilo 的答案,您需要创建一个应用程序包(请参阅Apple Bundle Programming guide)。您需要将控制台应用程序移动到MyApp.app/Contents/MacOS/MyApp. 还有一个 Frameworks 目录,您需要在其中添加 OpenCV 库作为框架。有关 OpenCV 框架的一些信息,请参阅OpenCV Wiki。框架(最简单的)几乎是一个包装在特定目录结构中的动态库。

我建议考虑Xcode在 mac 上使用,因为与通过脚本和 Makefile 自己做相比,它简化了包的构建和链接到框架。

于 2012-07-11T22:19:21.210 回答
0

有两种方法可以做到这一点。如果您不打算与您要链接的任何库遇到许可问题,您可以静态链接。这很容易通过使用来处理。g++ -o myApp -static -lopencv myapp.cpp 但是,这也取决于您要链接到的库的现有静态库。如今,大多数使用共享库分发静态库。

另一种方法是分发共享库并告诉您的应用程序强制它使用-rpath. 注意:我是在告诉你 Linux 的方法,它可能在 Mac 上可以工作,但我无法测试。

所以说你所有的共享库都和你的可执行文件在同一个目录下,你可以编译:g++ -rpath ./ -lopencv -o YourApp yourApp.cpp

我希望这有帮助。

于 2012-07-11T21:01:46.163 回答