Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OS X中针对不同的SDK运行应用程序? 总结_C++_Macos_Linker_Libraries_Loader - Fatal编程技术网

C++ 在OS X中针对不同的SDK运行应用程序? 总结

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

我想对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 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
将列出它们。

尝试以下操作:

  • 在Xcode中打开您的项目
  • 在“组和文件”列的“可执行文件”下,右键单击应用程序的可执行文件并选择“获取信息”
  • 选择参数选项卡
  • 在窗口的下半部分,在“要在环境中设置的变量:”下,单击+按钮
  • 在表中显示的行中,在名称下输入DYLD_LIBRARY_PATH,并在值下输入路径(例如/Developer/SDKs/MacOSX10.5.sdk/usr/lib)
  • 现在您已经设置了链接路径环境变量。当您从Xcode中运行可执行文件时,将为您设置此环境变量。要测试你的应用程序,只需进入Run功能表并选择Run。如果在Finder中直接双击应用程序来运行该应用程序,则无法为您设置此环境变量。该设置仅在从Xcode运行时生效

    以下是苹果公司关于这一过程的文档:


    非常好的问题,我没有答案,我很想听到一个答案。也不知道答案,但是C++可以很容易地编译成静态二进制——它将包括一个单独的可执行文件中的所有库。代码> G++--static 后天,STD C++可能不是最好的测试用例,但它仍然值得一试。我刚刚意识到OP需要一个环境变量。如果将加载路径更改为对@rpath的引用,那么DYLD_LIBRARY_路径应该是一个选项。我从来没有抽出时间来验证这是否有效,但从我所了解的情况来看,这似乎是正确的答案。正如我在问题中所说,DYLD_LIBRARY_路径没有帮助。您已经回答了“如何在Xcode中设置DYLD\u LIBRARY\u路径”这个问题,这不是我所问的(尤其是因为我不使用Xcode)。这是真的。过去我让DYLD_LIBRARY_PATH为我工作,所以我的假设是您没有在Xcode中正确设置环境变量。我不知道你没有使用Xcode。那你用什么来建造?只是好奇。仔细想想,您还没有提到如何知道加载备用动态库的尝试失败了。你能提供更多的信息吗?