c - GCC依赖问题

标签 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


我到处搜寻,无法弄清楚为什么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(框架目录)
/ Library / Frameworks(框架目录)

最佳答案

进一步了解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),而您安装的SDL库可能是错误或奇怪的。

您还可以传递-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)不可用(丢失或安装不正确)。

顺便说一句,在大多数Linux发行版上,您应该同时安装开发包(例如Debian上的libsdl2-dev等)和运行时库(例如libsdl2-2.0-0等)。 brew可能相同。请参见this

关于c - GCC依赖问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50270334/

相关文章:

linux - 从 gprof 输出丢失热函数

c - 重写 GCC 内联汇编以不需要 volatile 或内存破坏

c++ - 为什么我总是使用 openGL 2.1 版?[openGL/SDL]

c++ - SDL C++ 程序在大约 12 秒后持续崩溃

c - Short to Char 类型转换

C并发数组分配和释放

c++ - 检查用户是本地帐户还是域帐户

c - 我正在使用 RSA 算法的源代码。它编译正确,没有错误,但输出不正确

c++ - 无法理解 __attribute__ 标签

c++ - SDL 图像在 15 秒后消失