我正在尝试编译示例屏幕保护程序simplesquares.c(来自here)。我有vroot.h,这是我使用的命令:
gcc -lX11 -o simplesquares simplesquares.c
这些是返回的错误:
/tmp/cc0FvxcU.o: In function `VirtualRootWindowOfScreen':
simplesquares.c:(.text+0x55): undefined reference to `XInternAtom'
simplesquares.c:(.text+0x82): undefined reference to `XQueryTree'
simplesquares.c:(.text+0x108): undefined reference to `XGetWindowProperty'
simplesquares.c:(.text+0x14c): undefined reference to `XFree'
/tmp/cc0FvxcU.o: In function `main':
simplesquares.c:(.text+0x17b): undefined reference to `XOpenDisplay'
simplesquares.c:(.text+0x1c8): undefined reference to `XCreateGC'
simplesquares.c:(.text+0x201): undefined reference to `XSetForeground'
simplesquares.c:(.text+0x295): undefined reference to `XFillRectangle'
simplesquares.c:(.text+0x2e3): undefined reference to `XClearWindow'
simplesquares.c:(.text+0x2ef): undefined reference to `XFlush'
collect2: error: ld returned 1 exit status
这里发生了什么,我该如何解决?
答案 0 :(得分:3)
静态链接库应位于命令行的末尾。
gcc -o simplesquares simplesquares.c -lX11
来自http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html:
在您编写此选项的命令中,它会有所不同;该 链接器按顺序搜索和处理库和目标文件 它们是指定的。因此,'foo.o -lz bar.o'之后搜索库'z' 文件foo.o但在bar.o之前如果bar.o引用'z'中的函数, 这些功能可能无法加载。