未找到 LC_RPATH

问题描述 投票:0回答:1

我使用的是 mac os sonoma 14.2.1 并且 xcode-select 已完全更新。我从网站上下载了.dmg版本的SDL2并将其放在/Library/Frameworks中。

这是我尝试运行的代码:

// On linux compile with:
// g++ -std=c++17 main.cpp -o prog -lSDL2

// C++ Standard Libraries
#include <iostream>

// Third-party library
#include <SDL.h>

int main(int argc, char* argv[]){

    if(SDL_Init(SDL_INIT_VIDEO) < 0){
        std::cout << "SDL could not be initialized: " <<
                  SDL_GetError();
    }else{
        std::cout << "SDL video system is ready to go\n";
    }

    return 0;
}

我用这个命令成功编译了它:

clang++ main.cpp -I/Library/Frameworks/SDL2.framework/Headers -F/Library/Frameworks -framework SDL2

当我运行 a.out 文件时,出现此错误:

dyld[995]: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
  Referenced from: <AE1C0174-AA36-3B1F-A430-56DE38E61E1B> /Users/<myname>/Desktop/sdl_tutorial/source/1_Introduction_to_SDL/a.out
  Reason: no LC_RPATH's found
zsh: abort      ./a.out

我对 rpaths 做了一些研究,但我没有足够的背景来完全理解它。这是 xcode、clang 或 macOS 中的某种错误吗?

c++ macos sdl-2 clang++
1个回答
0
投票

您应该包括

<SDL2/SDL.h>
而不是
<SDL.h>
,那么您就不需要 -I/Library/Frameworks/SDL2.framework/Headers

当我升级到 Ventura 时,我发现以前有效的程序开始失败,并显示

dyld[...]: Symbol not found: _SDL_AllocFormat
otool -L a.out
显示

    @rpath/SDL2.framework/Versions/A/SDL2 (compatibility version 3001.0.0, current version 3001.2.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1336.61.1)

正如预期的那样,但是

otool -l a.out | grep -i rpath
显示

         name @rpath/SDL2.framework/Versions/A/SDL2 (offset 24)

没有

LC_RPATH
条目 - 这也是您所看到的,尽管索诺玛有更好的错误消息。因此,解决此问题的一个方法是将
-rpath /Library/Frameworks
添加到您的链接步骤(或编译/链接步骤,在您的情况下)。

我认为不自动将 LC_RPATH 规范添加到依赖 -F/-framework 的代码中是一个错误,但不是我的调用。

© www.soinside.com 2019 - 2024. All rights reserved.