我是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
并且您可能需要添加其他选项,尤其是一个或多个
-I
include-dir和相应的-L
lib-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/