我是makefile的新手我在编译时遇到了这个错误。
all: main
main.o:ssh-functions.o mysql_connector.o
g++ -c main.c ssh-functions.o mysql_connector.o -I libuv/include -L libuv/ -luv -lrt -lpthread
ssh-functions.o:ssh-functions.cpp
g++ -c ssh-functions.cpp -lssl -lcrypto
mysql_connector.o: mysql_connector.c
g++ -I/usr/include/mysql/ -c mysql_connector.c -L/usr/include/mysql/ -lmysqlclient
clean:
rm -rf *.o
输出:
g++ -c ssh-functions.cpp -lssl -lcrypto
g++ -I/usr/include/mysql/ -c mysql_connector.c -L/usr/include/mysql/ -lmysqlclient
g++ -c main.c ssh-functions.o mysql_connector.o -I libuv/include -L libuv/ -luv -lrt -lpthread
In file included from main.c:4:0:
mysql_connector.c:4:19: fatal error: mysql.h: No such file or directory
compilation terminated.
make: *** [main.o] Error 1
答案 0 :(得分:1)
您需要在每个编译器调用上添加-I/usr/include/mysql
,该调用将编译包含#include <mysql.h>
或等效的源代码。
你在编译main.c
的行上错过了。
提示1:在您正在编译的源代码文件之前将-I
(包括搜索路径)移至,以及-L
(库搜索路径)和{ <1}}(库)代码文件之后的部分。 -l
用于预处理器,它首先运行 。 -I
和-L
用于链接器,它运行 last 。
提示2:除非您确切知道自己在做什么,否则不使用-l
。请改用-lpthread
。如果你需要一个编译,你最有可能需要它用于同一个项目中的所有编译。 (并将其放在所有内容之前,这会影响完整的编译,预处理器和链接器。)
答案 1 :(得分:1)
尝试s.th.像这样(最终将main
替换为main.exe
,这取决于您的目标操作系统环境):
MY_INCLPATHS=-I /usr/include/mysql -I libuv/include
MY_LIBPATHS=-L /usr/include/mysql -L libuv/
MY_LIBS=-lmysqlclient -lssl -lcrypto -luv -lrt -lpthread
all: main
main: main.o ssh-functions.o mysql_connector.o
g++ ${MY_LIBPATHS} main.o ssh-functions.o mysql_connector.o ${MY_LIBS} -o main
main.o: main.c
g++ ${MY_INCLPATHS} -c main.c
ssh-functions.o: ssh-functions.cpp
g++ ${MY_INCLPATHS} -c ssh-functions.cpp
mysql_connector.o: mysql_connector.c
g++ ${MY_INCLPATHS} -c mysql_connector.c
clean:
rm -rf main *.o