C++ 在OS X中针对不同的SDK运行应用程序? 总结
我想对10.5库运行交叉编译的应用程序。是否有一个环境变量允许这项工作 较长版本 <>我在10.5主机上编译了我的OS X C++应用程序,它是一个10.6主机。它编译得很好。编译后的应用程序链接到库,如C++ 在OS X中针对不同的SDK运行应用程序? 总结,c++,macos,linker,libraries,loader,C++,Macos,Linker,Libraries,Loader,我想对10.5库运行交叉编译的应用程序。是否有一个环境变量允许这项工作 较长版本 我在10.5主机上编译了我的OS X C++应用程序,它是一个10.6主机。它编译得很好。编译后的应用程序链接到库,如/usr/lib/libstdc++.6.dylib。当我在我的系统上运行它时,它将使用10.6版本的“主机”库。我想针对10.5版本进行测试,这些版本都包含在`/Developer/SDKs/MacOSX10.5.sdk目录中。我该怎么做 我尝试了各种风格的DYLD\u LIBRARY\u PAT
/usr/lib/libstdc++.6.dylib
。当我在我的系统上运行它时,它将使用10.6版本的“主机”库。我想针对10.5版本进行测试,这些版本都包含在`/Developer/SDKs/MacOSX10.5.sdk目录中。我该怎么做
我尝试了各种风格的DYLD\u LIBRARY\u PATH、DYLD\u ROOT\u PATH等,但我没有成功地让它工作。这不太可能,因为OS X没有稳定的内核ABI。相反,稳定的ABI是由系统库提供的。因此,使用与内核版本不同的系统库可能会中断。(我不知道它断裂的程度。)
请参见使用安装工具更改路径。如果链接器没有添加填充,您可能无法挤出更长的路径,但您可以使用rpath代替。例如,我通过以下操作更改系统上某个应用程序的加载路径以使用10.5 SDK:
install_name_tool -change /usr/lib/libstdc++.6.dylib @rpath/libstdc++.6.dylib /path/to/executable
install_name_tool -add_rpath /Developer/SDKs/MacOSX10.5.sdk/usr/lib /path/to/executable
事实发生后,一切都很顺利。我不想做出任何保证,但假设您最初是根据10.5SDK编译的,那么您就有机会了
如果您需要查看可执行文件正在使用的路径,otool-L
将列出它们。尝试以下操作:
非常好的问题,我没有答案,我很想听到一个答案。也不知道答案,但是C++可以很容易地编译成静态二进制——它将包括一个单独的可执行文件中的所有库。代码> G++--static 后天,STD C++可能不是最好的测试用例,但它仍然值得一试。我刚刚意识到OP需要一个环境变量。如果将加载路径更改为对@rpath的引用,那么DYLD_LIBRARY_路径应该是一个选项。我从来没有抽出时间来验证这是否有效,但从我所了解的情况来看,这似乎是正确的答案。正如我在问题中所说,DYLD_LIBRARY_路径没有帮助。您已经回答了“如何在Xcode中设置DYLD\u LIBRARY\u路径”这个问题,这不是我所问的(尤其是因为我不使用Xcode)。这是真的。过去我让DYLD_LIBRARY_PATH为我工作,所以我的假设是您没有在Xcode中正确设置环境变量。我不知道你没有使用Xcode。那你用什么来建造?只是好奇。仔细想想,您还没有提到如何知道加载备用动态库的尝试失败了。你能提供更多的信息吗?