操作系统:Mac OS
demo项目结构:
makefile文件这样写:
objects = demo.o cJSON/cJSON.o
demo : $(objects)
cc -o demo $(objects) -Wl,-rpath,. -L. -lwebsocket -lm
$(objects) :
demo.o : libwebsocket.h cJSON/cJSON.h
...
执行make命令后,出现这个错误:
有两个原因:
1. makefile中未链接cJSON.c,改成:
CC=gcc
CFLAGS += -lwebsocket -L./ -I/.../demo -I./cJSON
LFLAGS = -lpthread -lm
SRCS = demo.c ./cJSON/cJSON.c
OBJS = $(SRCS:.c:=.o)
EXEC = test
all:$(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $(EXEC) $(LFLAGS)
clean:
rm -rf $(EXEC) *.o
改完之后在unix服务器上好使,但是在本地mac上依然会出错误:clang: error: linker....
2. 我的mac默认的c/c++编译器是clang,所以出的错,于是我再次出手,把默认编译器改为gcc。具体做法:
- 安装最新版本gcc,brew install gcc。当然可以指定别的版本
- 查看安装路径及对应的文件名。我的分别是:
/usr/local/bin/gcc-9
/usr/local/bin/g++-9
/usr/local/bin/c++-9
- sudo vim ~/.bash_profile
- 在.bash_profile文件末尾添加:
alias gcc=/usr/local/bin/gcc-9
alias cc=/usr/local/bin/gcc-9
alias g++=/usr/local/bin/g++-9
alias c++=/usr/local/bin/c++-9
查看gcc --version:
最后再运行,完成