QT 5.5.1 删除了 -universal 选项:无法在 MAC 上创建通用二进制文件
QT 5.5.1 removed -universal option: no way of creating universal binaries on MAC
为什么从 ./configure
脚本中删除了 -universal
选项?
如何从源代码创建通用二进制文件?
我可以按如下方式分别创建 32 位和 64 位框架:
1) 64 位 QT 框架
#Choose platform from qtbase/mkspecs/
./configure -release -opensource -confirm-license -prefix /tmp/ -nomake tests -nomake examples -platform macx-clang
#Only needed QTcore, QTNetwork, QTGui module, so i choose "module-qtbase"
make -j4 module-qtbase
在创建 32 位之前复制 qtbase/lib/
某处
2) 32 位 QT 框架
./configure -release -opensource -confirm-license -prefix /tmp/ -nomake tests -nomake examples -platform macx-clang-32
make -j4 module-qtbase
现在在 32 位 qtbase\lib
和 64 位 qtbase\lib
上使用 lipo
很麻烦。在 MAC 上是否有任何创建通用二进制文件的新方法?
我还需要支持32位
我不得不手动编写如下。
如果其他人提出更好的答案,我会接受他们的。
#This is in qt-everywhere/src/ directory
#Build for 32-bit
./configure -release -opensource -confirm-license -prefix ~/tmp/ -nomake tests -nomake examples -openssl-linked -I $(OPENSSL_INC) -L $(OPENSSL_LIB) -platform macx-clang-32
make
#Backup required 32-bit binaries. I only needed qtbase and plugins
#-R because frameworks contain symlinks
cp -Rf qtbase/lib ../out_32/lib
cp -Rf qtbase/plugins ../out_32/plugins
make clean
./configure -release -opensource -confirm-license -prefix ~/tmp/ -nomake tests -nomake examples -openssl-linked -I $(OPENSSL_INC) -L $(OPENSSL_LIB) -platform macx-clang
make
#Backup required 64-bit binaries.
cp -Rf qtbase/lib ../out_64/lib
cp -Rf qtbase/plugins ../out_64/plugins
cd ..
#creating universal frameworks
FR="QtGui QtCore QtNetwork QtWidgets"
for fr in ${FR}; do
rm -rf out/$fr.framework
cp -Rf out_64/lib/$fr.framework out/
rm -rf out/$fr.framework/Versions/Current/$fr
lipo -create -output out/$fr.framework/Versions/Current/$fr \
out_32/lib/$fr.framework/Versions/Current/$fr \
out_64/lib/$fr.framework/Versions/Current/$fr
done
out
目录包含通用框架。
为什么从 ./configure
脚本中删除了 -universal
选项?
如何从源代码创建通用二进制文件? 我可以按如下方式分别创建 32 位和 64 位框架:
1) 64 位 QT 框架
#Choose platform from qtbase/mkspecs/
./configure -release -opensource -confirm-license -prefix /tmp/ -nomake tests -nomake examples -platform macx-clang
#Only needed QTcore, QTNetwork, QTGui module, so i choose "module-qtbase"
make -j4 module-qtbase
在创建 32 位之前复制 qtbase/lib/
某处
2) 32 位 QT 框架
./configure -release -opensource -confirm-license -prefix /tmp/ -nomake tests -nomake examples -platform macx-clang-32
make -j4 module-qtbase
现在在 32 位 qtbase\lib
和 64 位 qtbase\lib
上使用 lipo
很麻烦。在 MAC 上是否有任何创建通用二进制文件的新方法?
我还需要支持32位
我不得不手动编写如下。 如果其他人提出更好的答案,我会接受他们的。
#This is in qt-everywhere/src/ directory
#Build for 32-bit
./configure -release -opensource -confirm-license -prefix ~/tmp/ -nomake tests -nomake examples -openssl-linked -I $(OPENSSL_INC) -L $(OPENSSL_LIB) -platform macx-clang-32
make
#Backup required 32-bit binaries. I only needed qtbase and plugins
#-R because frameworks contain symlinks
cp -Rf qtbase/lib ../out_32/lib
cp -Rf qtbase/plugins ../out_32/plugins
make clean
./configure -release -opensource -confirm-license -prefix ~/tmp/ -nomake tests -nomake examples -openssl-linked -I $(OPENSSL_INC) -L $(OPENSSL_LIB) -platform macx-clang
make
#Backup required 64-bit binaries.
cp -Rf qtbase/lib ../out_64/lib
cp -Rf qtbase/plugins ../out_64/plugins
cd ..
#creating universal frameworks
FR="QtGui QtCore QtNetwork QtWidgets"
for fr in ${FR}; do
rm -rf out/$fr.framework
cp -Rf out_64/lib/$fr.framework out/
rm -rf out/$fr.framework/Versions/Current/$fr
lipo -create -output out/$fr.framework/Versions/Current/$fr \
out_32/lib/$fr.framework/Versions/Current/$fr \
out_64/lib/$fr.framework/Versions/Current/$fr
done
out
目录包含通用框架。