GCC依赖性问题

时间:2018-05-10 10:02:52

标签: c gcc sdl gfx

我是C的新手,我想使用SDL2,所以我从他们的网站下载了他们的库(使用chrome)并将其放入/Library/Framework(使用finder,我在OS X上)。

这是在这一点上工作,但后来我发现我需要SDL_gfx的一些功能,我唯一可以解决安装问题的方法是使用brew(brew install sdl_gfx)。但那时还安装了SDL的另一个副本,我收到了这个错误:

objc[27030]: Class SDLTranslatorResponder is implemented in both 
/usr/local/opt/sdl/lib/libSDL-1.2.0.dylib (0x1076e9680) and 
/Library/Frameworks/SDL2.framework/Versions/A/SDL2 (0x10762e748). One 
of the two will be used. Which one is undefined.

然后我去了/Library/Frameworks并删除了我最初手动放置的SDL版本(再次使用finder,该文件被称为" SDL2.framework"),但现在我得到了这个错误:

dyld: Library not loaded: @rpath/SDL2.framework/Versions/A/SDL2
  Referenced from: /c_gui/./circuit
  Reason: image not found

我已经google了,无法弄清楚为什么gcc会这样做。可能不重要,但我正在编译:

gcc -g -framework Cocoa -lSDL_gfx -lSDLmain -lSDL -o circuit circuit.c

尝试获取this示例代码进行编译

尝试使用-v进行编译时,会自动包含以下路径。我查了一下,SDL sdl.h看起来不在其中任何一个:

  • / usr / local / include
  • /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.1.0/include

  • /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include

  • / usr / include / System / Library / Frameworks(framework directory)
  • / Library / Frameworks(framework directory)

1 个答案:

答案 0 :(得分:0)

详细了解Invoking GCC。请注意,-framework不是gcc已知的选项(由FSF发布)。您可以尝试使用gcc --help来获取gcc所理解的选项,也可以通过-v获取gcc使用的子程序的帮助。也许你的gcc命令实际上是一些Clang编译器(IIRC,Apple系统可能就是这种情况)。

您可能想要关联一些library。所以请阅读link options

gcc的参数顺序非常重要,可能是系统特定的。通常,源文件应该在目标文件和库之前(它们的顺序很重要,从高级到低级)。另请参阅this

你可能想要(我不确定库的顺序):

gcc -g -Wall -Wextra circuit.c -lSDL_gfx -lSDLmain -lSDL -o circuit 

您可能需要添加其他选项,特别是一个或多个-Iinclude-dir和相应的-Llib-dir标记;要添加的确切选项取决于您安装SDL库的方式(可能请参阅this),您可能已经错误地或奇怪地安装了它。

您还可以通过-v了解gcc驱动程序正在运行的程序,并-H了解包含哪些头文件。

gcc选项的确切列表可能是系统特定的。有时,您可以使用pkg-config。而且您经常希望使用某些build automation工具来驱动gcc编译命令,例如GNU make(及其Makefile)或ninja

还要研究与您相关的现有free software源代码的灵感(例如github)。

顺便说一句,如果你完全 C新想要学习C编程,你可以先开始编写简单的命令行程序,这些程序只依赖于C standard library(所以不要使用SDL)。您需要了解如何use the gdb debugger

  

我从他们的网站下载了他们的库并将其放在/ Library / Framework中(我在OS X上)。

这很可能是错误的或不完整的。你应该提供更多细节。

  

我检查过,SDL sdl.h看起来并不属于......

这可能意味着SDL开发包(包含sdl.h的头文件)不可用(丢失或安装不正确)。

BTW,在大多数Linux发行版上,你应该安装开发包(例如Debian上的libsdl2-dev等)和运行时库(例如libsdl2-2.0-0等...)。它与brew可能相同。请参阅this

相关问题