我在OS X 10.9上编写了一个C ++程序,我想分发可执行文件,但该程序不能在OS X 10.7上运行。我收到错误消息Illegal instruction: 4
。有没有办法在OS X 10.9上编译我的程序并使其适用于OS X的早期版本,比如10.6和更高版本?我没有使用Xcode,我使用的是clang ++ 3.4版,支持OpenMP(http://clang-omp.github.io)。作为旁注,我还希望将OpenMP库与我的程序一起分发,以便用户不必自己安装它。如何使库适用于旧版本的OS X?
注意:当我在编译期间使用类似-mmacosx-version-min=10.6
的内容时,我会收到几个与"架构x86_64"的未定义符号相关的错误。例如,在这个非常简单的程序上:
#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)
答案 0 :(得分:0)
根据您提问的日期,我猜这是特定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上运行它。