在静态链接到boost但在osx上没有动态链接时找不到_Unwind_Resume

时间:2016-03-18 00:23:09

标签: c++ xcode macos boost qmake

我正在开发一个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更新破坏我的构建脚本时,我讨厌它。

0 个答案:

没有答案