当前位置:  开发笔记 > 编程语言 > 正文

相对路径在Xcode C++中不起作用

如何解决《相对路径在XcodeC++中不起作用》经验,为你挑选了2个好方法。

网上有很多帖子详细说明了相对路径在Xcode中是如何工作的.我有一个Xcode模板,我下载了相对路径DO工作,但我无法找出原因,也没有在其他项目中复制它.

首先,我在Xcode 3.1中使用C++.我不使用Objective-C,也不使用任何Cocoa/Carbon框架,只使用纯C++.

这是在我的其他Xcode模板中工作的代码:

sound->LoadMusic( (std::string) "Resources/Audio/Pop.wav" );

这个相对路径也适用于Windows.运行以下命令为我提供了应用程序完整路径的绝对路径:

std::cout << "Current directory is: " << getcwd( buffer, 1000) << "\n";

/应用/对myApp

我们怎样才能获得在Xcode .app包中工作的相对路径?



1> Brock Woolf..:

花了大约5个小时的谷歌和尝试不同的东西,最终找到答案!

#ifdef __APPLE__
#include "CoreFoundation/CoreFoundation.h"
#endif

// ----------------------------------------------------------------------------
// This makes relative paths work in C++ in Xcode by changing directory to the Resources folder inside the .app bundle
#ifdef __APPLE__    
    CFBundleRef mainBundle = CFBundleGetMainBundle();
    CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle);
    char path[PATH_MAX];
    if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX))
    {
        // error!
    }
    CFRelease(resourcesURL);

    chdir(path);
    std::cout << "Current Path: " << path << std::endl;
#endif
// ----------------------------------------------------------------------------

我抛出了一些额外的包含警卫,因为这使得它只编译Apple(我开发跨平台)并使代码更好.

我感谢其他2个人的答案,你的帮助最终让我找到了正确的答案,所以我已经投票给你了.多谢你们!!!!


你不知道这有多大帮助.谢谢发帖!
添加CoreFoundation框架以解决与未定义_CF*相关的​​链接错误
架构i386的未定义符号:"_ CFBundleCopyResourcesDirectoryURL",引用自:player :: player :: player()in player-1308A7B7A421D47D.o"_ CFBundleGetMainBundle",引用自:player :: player()in player-1308A7B7A421D47D.o"_CFRelease",引用自:player :: 1308A7B7A421D47D.o"_CFURLGetFileSystemRepresentation"中的player :: player(),引用自:播放器-1308A7B7A421D47D.o中的:player :: player()ld:未找到架构i386的符号

2> cdespinosa..:

不要依赖二进制代码中的当前工作目录.只是不要.在Mac,Windows或Unix上,您无法信任操作系统或shell将其设置为您希望设置的位置.

对于直接C,在dyld.h中使用_NSGetExecutablePath来获取当前可执行文件的路径,然后你可以从那里开始相对.

如果您只是在试验并希望它能够工作,那么在Xcode中选择Project> Edit Active Executable,然后在那里有一个面板,您可以在其中将初始工作目录设置为项目目录,可执行文件的父目录或任意目录.这应仅用于测试目的.在Mac OS中,当您编写一个真实的应用程序并从Finder启动它时,工作目录是/.对于Unix应用程序,您无法控制工作目录.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有