0

我是 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
4

2 回答 2

1

试试…… 像这样(最终替换mainmain.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
于 2013-02-23T20:55:45.900 回答
1

您需要-I/usr/include/mysql在每个编译器调用上添加,它将编译包含#include <mysql.h>或等效的源代码。

你在 compiles 的行上错过了那个main.c

提示 1:将-I(include search paths) 移到您正在编译的源代码文件之前-L,将(library search paths) 和-l(libraries) 部分移到代码文件之后。-I用于预处理器,它首先运行。-L并且是最后-l运行的链接器。

提示 2:除非您确切知道自己在做什么,否则不要使用。-lpthread改为使用-pthread。如果你需要它来进行一次编译,那么你很可能需要它来进行同一个项目中的所有编译。(把它放在影响完整编译、预处理器和链接器的所有内容之前。)

于 2013-02-23T20:26:36.240 回答