Mac配置Qt环境和把应用打包成dmg文件
1.下载和安装Qt
可以选择官网下载online版本,编译环境需要选中mac,否则,无构建环境;
2.Mac中编译的应用程序都是app
(1)应用的可执行目录是xx.app/Contents/MacOS;
(2)frameworks_my目录加载了一个共享库libuntitled_qt_lib.1.0.0.dylib
- 打包依赖库通过macdeployqt来补全;
2.1 包结构目录

2.2包结构的tree目录
└── Contents
├── Frameworks
│ ├── QtCore.framework
│ │ ├── ……
……
├── Resources
│ ├── empty.lproj
│ └── qt.conf
└── frameworks_my
└── libuntitled_qt_lib.1.0.0.dylib
2.3 mac中qt动态加载代码
mac 动态加载dylib,代码和其他平台一样,只是文件后缀是dylib;
具体代码如下:
QLibrary lib;
// 1.相对路径; ok;
QString strAppPath = QCoreApplication::applicationDirPath();
#if 0
qDebug()<<"Mac app path test:"<<strAppPath; // => untitled_qt_mac_test.app/Contents/MacOS;
lib.setFileName(QString(strAppPath + "//../../../libuntitled_qt_lib.1.0.0"));
#endif
// 2.打包路径; ok;
lib.setFileName(QString(strAppPath + "//../frameworks_my/libuntitled_qt_lib.1.0.0"));
// libuntitled_qt_lib.1.0.0.dylib
if(!lib.load()){
qDebug() << "load library failed";
qDebug() << lib.errorString();
return 0;
}
typedef int (*testMacLib)(int, int);
testMacLib myAdd = (testMacLib)lib.resolve("testMacLib");
if(myAdd){
qDebug() << "1 + 1 = " << myAdd(1,1);
}
else{
qDebug() << lib.errorString();
}
2.4 nm列出动态库里面的导出函数
mac平台xcode里面的工具。
(1)列出 liblistdevs.so 的函数 输出到 listdevs.txt 文本文件里面
nm -D liblistdevs.so > listdevs.txt
(2)列出 liblistdevs.so 的函数 输出到 listdevs.txt 文本文件里面
objdump -tT liblistdevs.so > listdevs.txt
2.5 列出某个文件的详细信息
mac平台xcode里面的工具。
(1)命令行: otool -hv libuntitled_qt_lib.1.0.0.dylib
(2)结果:
libuntitled_qt_lib.1.0.0.dylib:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 DYLIB 19 1776 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK NO_REEXPORTED_DYLIBS
3.app打包成dmg文件

1万+



被折叠的 条评论
为什么被折叠?



