【问题标题】:Where is the "App Bundle" looking for my media folder? Folder found when running app from Qt Creator, "file not found" when using Terminal“App Bundle”在哪里寻找我的媒体文件夹?从 Qt Creator 运行应用程序时找到文件夹,使用终端时“找不到文件”
【发布时间】:2011-11-30 06:34:09
【问题描述】:

我在让我的 app bundle 从终端运行或只是双击它时遇到了一点问题。

这个应用程序实际上可以在 Qt Creator IDE 中完美地编译、链接和运行。但是,如果我尝试从终端打开它,我会收到“找不到 media/file.x 文件”错误。应用程序包和 /Contents/MacOS/executable 都在寻找应该在可执行文件旁边的“媒体”文件夹。

在我的应用程序中,我执行以下操作:

openFile("media/file.x");

在 Windows 和 Linux 中,如果“media”文件夹与可执行文件的层级位置完全相同(在它旁边),则会找到此文件。在 Mac 上,我发现它的工作方式不同,因为 Qt Creator 构建了一个“App Bundle”,而实际的可执行文件位于 /Contents/MacOS 文件夹中,所以我在那里手动复制了“媒体”。当从 Qt Creator “播放”我的应用程序时,这很容易,但如前所述,它在运行包本身时不起作用。

那么有谁知道我在哪里或如何使这个“媒体”文件夹的外观同质化,以便它同时适用于:Qt Creator 和 App 包?

最近,我一直在使用以下命令来“安装”捆绑包上的文件夹。

mac {
    MediaFiles.files = media
    MediaFiles.path = Contents/MacOS
    QMAKE_BUNDLE_DATA += MediaFiles
}

感谢您的帮助。

【问题讨论】:

    标签: macos qt bundle qt-creator


    【解决方案1】:

    找了几天后,我发现了一些讨论相对路径问题的帖子。我只是没有用正确的词搜索...答案显示在:

    Relative Paths Not Working in Xcode C++

    http://www.experimentgarden.com/2009/06/how-to-load-resource-from-your.html

    基本上需要加上这个:

    //On the include part
    #ifdef __APPLE__
    #include "CoreFoundation/CoreFoundation.h"
    #endif
    
    
    // On the main of your app
    // 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
    // ----------------------------------------------------------------------------
    

    重要提示: chdir,改变了应用程序的工作路径,所以之后不需要改变你的相关代码......

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多