gpt4 book ai didi

macos - OS X 程序在开发机器上运行,在其他机器上严重崩溃

转载 作者:行者123 更新时间:2023-12-04 06:49:02 27 4
gpt4 key购买 nike

我有一台 OS X 10.6 Mac 作为我的开发机器。我写的程序在开发机器上完美运行。但是,当我尝试在 OS X 10.5(不确定这是否相关)测试机器上运行它时,它在启动时崩溃。

这是我得到的错误:

Process:         MyApp[25908]
Path: /Applications/MyApp.app/Contents/MacOS/MyApp
Identifier: MyApp
Version: ??? (???)
Code Type: X86 (Native)
Parent Process: launchd [109]

Interval Since Last Report: 17392106 sec
Crashes Since Last Report: 735
Per-App Interval Since Last Report: 0 sec
Per-App Crashes Since Last Report: 8

Date/Time: 2010-08-14 07:50:09.768 -0700
OS Version: Mac OS X 10.5.8 (9L31a)
Report Version: 6
Anonymous UUID: 1BF30470-ACF2-46C7-B6D5-4514380965C8

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0

Dyld Error Message:
Symbol not found: __ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i
Referenced from: /Applications/MyApp.app/Contents/MacOS/MyApp
Expected in: /usr/lib/libstdc++.6.dylib

所以看起来它崩溃了,因为它正在加载动态库 libstdc++.6 的不兼容版本。这种东西普通吗?在 Google 上搜索并没有真正发现许多其他有这个问题的程序。我应该在编译中做什么来防止这种情况发生?我是否需要以某种方式在我的应用程序包中包含 libstdc++?

最佳答案

此问题的解决方案是将以下代码添加到您的源文件之一:

// Workarounds for symbols that are missing from Leopard stdlibc++.dylib.
_GLIBCXX_BEGIN_NAMESPACE(std)
// From ostream_insert.h
template ostream& __ostream_insert(ostream&, const char*, streamsize);

#ifdef _GLIBCXX_USE_WCHAR_T
template wostream& __ostream_insert(wostream&, const wchar_t*, streamsize);
#endif

// From ostream.tcc
template ostream& ostream::_M_insert(long);
template ostream& ostream::_M_insert(unsigned long);
template ostream& ostream::_M_insert(bool);
#ifdef _GLIBCXX_USE_LONG_LONG
template ostream& ostream::_M_insert(long long);
template ostream& ostream::_M_insert(unsigned long long);
#endif
template ostream& ostream::_M_insert(double);
template ostream& ostream::_M_insert(long double);
template ostream& ostream::_M_insert(const void*);

#ifdef _GLIBCXX_USE_WCHAR_T
template wostream& wostream::_M_insert(long);
template wostream& wostream::_M_insert(unsigned long);
template wostream& wostream::_M_insert(bool);
#ifdef _GLIBCXX_USE_LONG_LONG
template wostream& wostream::_M_insert(long long);
template wostream& wostream::_M_insert(unsigned long long);
#endif
template wostream& wostream::_M_insert(double);
template wostream& wostream::_M_insert(long double);
template wostream& wostream::_M_insert(const void*);
#endif

// From istream.tcc
template istream& istream::_M_extract(unsigned short&);
template istream& istream::_M_extract(unsigned int&);
template istream& istream::_M_extract(long&);
template istream& istream::_M_extract(unsigned long&);
template istream& istream::_M_extract(bool&);
#ifdef _GLIBCXX_USE_LONG_LONG
template istream& istream::_M_extract(long long&);
template istream& istream::_M_extract(unsigned long long&);
#endif
template istream& istream::_M_extract(float&);
template istream& istream::_M_extract(double&);
template istream& istream::_M_extract(long double&);
template istream& istream::_M_extract(void*&);

#ifdef _GLIBCXX_USE_WCHAR_T
template wistream& wistream::_M_extract(unsigned short&);
template wistream& wistream::_M_extract(unsigned int&);
template wistream& wistream::_M_extract(long&);
template wistream& wistream::_M_extract(unsigned long&);
template wistream& wistream::_M_extract(bool&);
#ifdef _GLIBCXX_USE_LONG_LONG
template wistream& wistream::_M_extract(long long&);
template wistream& wistream::_M_extract(unsigned long long&);
#endif
template wistream& wistream::_M_extract(float&);
template wistream& wistream::_M_extract(double&);
template wistream& wistream::_M_extract(long double&);
template wistream& wistream::_M_extract(void*&);
#endif

_GLIBCXX_END_NAMESPACE

潜在的问题是,有几个模板在 libstdc++ 头文件中被声明为 extern 模板,虽然它们的实例化由 10.6+ 上的 libstdc++ 提供,但它们不是由 10.5 上的 libstdc++ 提供的。因此,当您使用这些模板时,您最终会成功链接 10.6 SDK 以获取 10.5 操作系统未提供的功能,因此 dyld 在启动时就失败了。通过自己提供实例化,您可以确保您的代码将加载到 Snow Leopard 上。

或者,您可以
#define _GLIBCXX_EXTERN_TEMPLATE 0 

在您的前缀文件中,但这样做会导致模板代码膨胀。

关于macos - OS X 程序在开发机器上运行,在其他机器上严重崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com