【问题标题】:Linking SDL2 emits countless linking errors on OSX链接 SDL2 在 OSX 上发出无数链接错误
【发布时间】:2016-06-28 21:54:47
【问题描述】:

我有这个超级简单的 SDL2 可执行文件:

#include <SDL.h>

int main(void)
{
    SDL_Texture* t;
    SDL_DestroyTexture(t);
}

我尝试这样编译:

clang++ $(sdl2-config --cflags --libs) foo.cc 

这给了我一连串的链接错误,这些都与 Objective-C 和 Apple 库有关。我可以用SDL_Surface* s; SDL_DestroySurface(s); 做同样的事情,它不会发出这些错误。

我发现我可以使用$(sdl2-config --static-libs) 来解决这个问题。但我很确定,我不需要使用它。毕竟 SDL2 库不应该已经链接到它们了吗?为什么它只出现在 SDL_Texture 上,而没有出现在 SDL_Surface 上?我做错了什么?

编辑:我不知道为什么我投了反对票。这里我有一个链接错误的小样本:

Undefined symbols for architecture x86_64:
  "_AudioObjectAddPropertyListener", referenced from:
      _COREAUDIO_Init in libSDL2.a(SDL_coreaudio.o)
      _COREAUDIO_OpenDevice in libSDL2.a(SDL_coreaudio.o)
  "_AudioObjectGetPropertyData", referenced from:
      _COREAUDIO_OpenDevice in libSDL2.a(SDL_coreaudio.o)
      _device_unplugged in libSDL2.a(SDL_coreaudio.o)
      _build_device_list in libSDL2.a(SDL_coreaudio.o)
  "_AudioObjectGetPropertyDataSize", referenced from:
  (...)

【问题讨论】:

    标签: c macos linker sdl sdl-2


    【解决方案1】:

    您似乎未能链接到 CoreAudio 框架。

    您需要将其添加到链接器命令行:

    -framework CoreAudio.framework
    

    【讨论】:

    • 但是 SDL2 库不应该已经链接到 CoreAudio(和其他)吗?为什么我必须这样做?我不使用任何 CoreAudio 函数(如上所示)。
    • @hgiesel 没有;这是一个静态库。在链接最终可执行文件时,您需要配置 Xcode/Cmake/whatever 以链接任何所需的库。一直都是这样。您必须这样做,因为 SDL 使用 CoreAudio 作为音频,因此您必须为其提供库。
    • 甚至 SDL 本身 discourages static linking。而且CoreAudio 不是一个静态库,因为/System/Library/Frameworks/CoreAudio.framework/Resources/BridgeSupport 中有CoreAudio.dylib 文件。我仍然不明白为什么我需要这样做。
    • 我不明白您在以静态库形式提供 SDL 时不鼓励静态链接的意思。静态库只是目标文件的集合,因此您可以将它们视为已编译的源文件。现在,如果您使用其他库中的某些内容,则需要链接到该库,因此这将取决于该库如何呈现给您。在这种情况下,SDL 使用了 CoreAudio,而 CoreAudio 是一个框架,因此是我的答案。您可能还需要提供其他库(例如 OpenGL)。
    • 好吧,我终于把整个库的名字写成这样了:clang++ -I/usr/local/include/SDL2 /usr/local/lib/libSDL2-2.0.0.dylib test.cc -o main。感谢您对我的包容!
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2019-08-26
    • 2013-02-26
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多