我正在开发一个shell脚本来运行qmake命令来在OSX上构建一个项目。
我在更新到Xcode 7.1.2之后遇到了这个错误(我必须这样做,因为在我更新XCode之前升级到yosemite后根本没有构建):
Undefined symbols for architecture x86_64:
"__Unwind_Resume", referenced from:
事实证明,qmake正在使用标记-mmacosx-version-min=10.5
生成一个makefile,并使用sed
将其更改为10.9
。
但是,现在我遇到的问题是链接到我写的4或5个boost库(使用自制软件)和另一个动态库(libbar64.dylib
)。以下是构建脚本的精简版本:
#!/bin/bash
PROJECT="foo"
# to find the dylib
install_name_tool -id "@executable_path/../Resources/libbar64.dylib"
# moc and uic
$QMAKEPATH/uic mainwindow.ui -o ui_mainwindow.h
$QMAKEPATH/moc mainwindow.h -o moc_mainwindow.cpp
# library paths and libs
libpath="-L/usr/local/Cellar/boost/1.59.0/lib/ -L/usr/local/lib -L./"
libs="-lbar64 -lboost_thread-mt -lboost_system-mt -lboost_chrono-mt -lboost_iostreams-mt -lboost_exception-mt -lboost_filesystem-mt"
# make pro file
$QMAKEPATH/qmake -project
echo 'LIBS +=' $libpath $libs >> $PROJECT.pro
# generate the makefile
$QMAKEPATH/qmake -spec macx-g++ $PROJECT.pro
# kludge
sed -i -e 's/min=10.5/min=10.9/g' Makefile
# make it
make
# put libbar into the resources folder
cp ./libbarl64.dylib $PROJECT.app/Contents/Resources/
出现问题的原因是foo
构建后不知道共享的boost库。我可以将DYLD_LIBRARY_PATH
设置为提升目录/usr/local/Cellar/boost/1.59.0/lib/
,但我不想这样做(because of this)。
我尝试将libs
变量更改为:
libs="-shared -lbar64 -static -lboost_thread-mt -lboost_system-mt -lboost_chrono-mt -lboost_iostreams-mt -lboost_exception-mt -lboost_filesystem-mt"
但现在我得到了
Undefined symbols for architecture x86_64:
"__Unwind_Resume", referenced from:
再次出错。有没有人知道如何在不交换环境变量的情况下解决这个问题?在最新的OSX更新之前,我从未遇到过这类问题。我想链接到静态提升,但由于某种原因,似乎与libgcc_eh.a libarary相反。当Apple更新破坏我的构建脚本时,我讨厌它。