[英]macos statically linking libstdc++ with g++ 4.7.2
我一直在這個問題上待了好幾個星期,沒有任何喜悅,所以是時候問一下堆棧溢出的智慧了...
由於各種原因,我需要將libstdc ++鏈接到我的可執行文件中,因此它沒有額外的依賴性。 使用g ++的-static-libstdc ++和-static-libgcc標志可以實現這一點,但是,沒有異常被捕獲。
我制作了以下測試代碼以進一步調查該問題。 當我以32模式而不是64位編譯時,代碼似乎可以正常工作。 我不明白為什么未捕獲到異常並且它令人沮喪。
設定
方案
#include <cstdio>
#include <stdexcept>
void myMethod() {
throw std::invalid_argument("foo");
}
int main () {
try {
myMethod();
} catch (const std::invalid_argument& ex) {
printf("caught: %s\n", ex.what());
} catch (...) {
printf("caught it\n");
}
return 0;
}
32位模式
$ g++ -m32 -o main Main.cpp -static-libgcc -static-libstdc++ && otool -L ./main && ./main
./main:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
caught: foo
64位模式
$ g++ -o main Main.cpp -static-libgcc -static-libstdc++ && otool -L ./main && ./main
./main:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
Abort trap: 6
我嘗試了多種方法來解決此問題,包括:
但無濟於事。
我需要檢查編譯器配置的某些部分嗎? 我想念的旗幟?
我知道mac在4.2.1版本停止了對g ++的支持,因此最好改用clang並希望該二進制文件仍適用於不同版本的OSX。
我認為Mac OS X上的GCC例外情況有點破:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45486
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42159
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.