gpt4 book ai didi

c++ - 如何在 OS X 10.9 上编译 C++ 程序并在以前的 OS X 版本上使用?

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:22 26 4
gpt4 key购买 nike

我在 OS X 10.9 上编写了一个 C++ 程序,我想分发可执行文件,但该程序无法在 OS X 10.7 上运行。我收到错误消息 Illegal instruction: 4。有没有办法在 OS X 10.9 上编译我的程序并让它在以前的 OS X 版本(比如 10.6 和更高版本)上运行?我没有使用 Xcode,我使用的是带有 OpenMP 支持的 clang++ 版本 3.4 ( http://clang-omp.github.io )。作为旁注,我还想随我的程序一起分发 OpenMP 库,这样用户就不必自己安装它。如何使库与旧版本的 OS X 一起工作?

注意:当我在编译期间使用类似 -mmacosx-version-min=10.6 的东西时,我收到了几个与“体系结构 x86_64 的 undefined symbol ”相关的错误。例如,在这个非常简单的程序中:

#include <iostream>

int main()
{
std::cout << "Hello, world!\n";
return 0;
}

编译为 clang++ -o hello hello.cc -mmacosx-version-min=10.6,出现以下错误:

Undefined symbols for architecture x86_64:
"__ZNKSt3__16locale9use_facetERNS0_2idE", referenced from:
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in hello-323147.o
"__ZNKSt3__18ios_base6getlocEv", referenced from:
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in hello-323147.o
"__ZNSt3__14coutE", referenced from:
_main in hello-323147.o
"__ZNSt3__15ctypeIcE2idE", referenced from:
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in hello-323147.o
"__ZNSt3__16localeD1Ev", referenced from:
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in hello-323147.o
"__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv", referenced from:
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in hello-323147.o
__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv in hello-323147.o
"__ZNSt3__18ios_base5clearEj", referenced from:
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in hello-323147.o
__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD2Ev in hello-323147.o
__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv in hello-323147.o
ld: symbol(s) not found for architecture x86_64
clang-3.4: error: linker command failed with exit code 1 (use -v to see invocation)

最佳答案

根据您提出问题的日期,我猜这是该特定 clang 版本中的某种错误。我试过用 Xcode 6.4 编译你的例子,它编译和链接都很好:

$ clang++ -o hello hello.cc -mmacosx-version-min=10.6
$ ./hello
Hello, world!
$ clang++ -v
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Thread model: posix

虽然没有旧的 osx 机器来测试它,只是在 Yosemite 上运行它。

关于c++ - 如何在 OS X 10.9 上编译 C++ 程序并在以前的 OS X 版本上使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24707294/

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