我想编译一个C图形程序,该图形程序具有图形库EGGXProCALL JAXA“ eggx.h”的头文件。我已经安装了Xcode,XQuartz。
我已在以下目录中安装了EGGX文件。
[[Home @ / opt / eggx] $
我在以下目录中有一个C文件。[[Home @〜/ Desktop / development] $
我已经检查了以下内容。①gcc在这里很好用
[Home @〜/ Desktop / development] $
②甚至示例程序也可以显示数字时钟,当前目录为[[Home @ / opt / eggx] $
时③问题
当我尝试通过使用我在Linux中拥有的makefile从[Home @〜/ Desktop / development] $
构建[make]程序时。我总是收到以下错误消息。[Home~/Desktop/development]$ sudo make
gcc -c main.c
main.c:7:10: fatal error: 'eggx.h' file not found
#include <eggx.h>
^~~~~~~~
1 error generated.
make: *** [main.o] Error 1
[Home@~/Desktop/development]$
这里是Makefile
# Makefile OBJS = main $(OBJS): $(OBJS).o # gcc -O2 -Wall $(OBJS).c -o $(OBJS) -I/usr/local/include -L/usr/local/lib64 -leggx -lX11 -lm gcc $(OBJS).c -o $(OBJS) -I/usr/local/include -L/usr/local/lib64 -leggx -lX11 -lm $(OBJS).o: $(OBJS).c gcc -c $(OBJS).c .PHONY: clean clean: rm -f $(OBJS) $(OBJS).o
1。下载并解压缩库。
git clone
或scp
下载来从某处复制源文件。摘录(从档案中解压缩)通常使用:
tar -xvf eggx-0.93r5.tar
通常会创建一个新目录(名称与tar文件相同,但没有.tar
扩展名,如:]
eggx-0.93r5
2。建立库。通常,您需要将目录更改为新创建的目录并运行
make
。我上次给了您Makefile,所以您需要这样做:
cd eggx-0.93r5 cp MAKEFILEFROMMARK Makefile make
应该没有错误。如果有错误,则必须解决它们,然后运行:
make clean # delete any rubbish from previous failed build make
3。安装库。您通常使用:
make install
实际执行的操作取决于您所安装的软件包,但是通常,它将把您刚刚制作的头文件和库复制到位置,例如“ known”
/usr/local
或[C0 ]。想法是通过“”发布“或将它们安装到已知位置,使计算机的所有用户都可以使用您自己的代码需要的所有文件。4。找出如何编译使用该库的简单C程序。您应该执行以下步骤
在完全不同的目录中
从将库下载到的位置-请勿将代码与库的代码混合。如果您的程序这样使用/opt/package
:
eggx.h
然后您需要找到#include "eggx.h"
的位置:
eggx.h
如果导致:
find /usr /opt /Users -name eggx.h
这意味着您必须将其添加到/path/to/somewhere/include/eggx.h
命令中以告诉编译器如何找到它:
gcc
如果您的库称为gcc -I/path/to/somewhere/include ...
,您也需要找到它:
libeggx.a
如果导致:
find /usr /opt /Users -name "libegg*a"
这意味着您需要将其添加到/path/to/somewhere/lib/libeggx.a
命令中以告诉链接器它在哪里以及它叫什么名字:
gcc
如果程序使用X11,则必须在Mac上安装XQuartz,并将X11的标志/开关添加到编译中:
gcc ... -L/path/to/somewhere/lib -leggx
因此,将所有内容放在一起,如果您的程序称为gcc ... -I /opt/X11/include -L /opt/X11/lib -lx11 ...
,则将进行编译和链接:
program.c
然后运行:
gcc program.c -o program -I/path/to/somewhere/include -I /opt/X11/include -L /opt/X11/lib -lx11 -L/path/to/somewhere/lib -leggx
5。制作一个包含您在(4)中学到的知识的Makefile。可能看起来像这样:
./program
您分两步构建程序:将源文件构建为目标文件
EGGINC = -I /path/to/somewhere/include
EGGLIB = -L /path/to/somewhere/lib -leggx
X11INC = -I /opt/X11/include
X11LIB = -L /opt/X11/lib -lx11
$(OBJS): $(OBJS).o
gcc $(OBJS).c -o $(OBJS) $(EGGLIB) $(X11LIB)
$(OBJS).o: $(OBJS).c
gcc -I/usr/local/include $(EGGINC) $(X11INC) -c $(OBJS).c
指令)是目标文件构建的一部分。因此,创建目标文件所需的所有标志(例如#include
选项)都应该在此存在,并且仅在此存在。因此,可以如下更改两个规则:
-I
当然,假设EGGX库已安装在$(OBJS): $(OBJS).o
gcc $(OBJS).c -o $(OBJS) -L/usr/local/lib64 -leggx -lX11 -lm
$(OBJS).o: $(OBJS).c
gcc -I/usr/local/include -c $(OBJS).c
中。