在c中编译多个源文件

时间:2015-06-22 18:10:34

标签: c makefile

我写了c程序,其中有3个文件(.c),主程序有 两个线程和一个文件有mysql连接功能,一个文件有 线程函数定义。我不知道如何编译所有这些 代码,通常我试过这样,

cc -pthread main.c 

但是,如果我这样编译,我会收到名为mysql函数的错误 未定义但是我已经将线程编写为单独的程序而且 mysql作为单独的程序并单独编译,它符合 成功了,我得到了输出。所以请帮我编译一下 项目文件名是,

main.c(声明2个线程)functions.c(线程函数 定义,并声明mysql func)db.c(mysql函数 定义)

请帮助编译我的代码?

2 个答案:

答案 0 :(得分:2)

编译多个.c文件时有两个基本选项:

选项1)

cc file1.c file2.c file3.c -o executable_name

优势:简单

缺点:如果您更改的是一个文件,则需要重新编译所有文件

选项2)

 cc file1.c -c -o file1.o
 cc file2.c -c -o file2.o
 cc file3.c -c -o file3.o
 cc file1.o file2.o file3.o -o executable_name

优点:如果您更改了一个文件,则无需重新编译所有内容

缺点:多个命令(但此时应使用Makefile)

-c标志告诉编译器compiler but not link。您不想链接,因为您还没有编译所有文件。 cc的最终调用会将所有.o个文件链接到可执行文件executable_name

答案 1 :(得分:1)

要准确理解您的需求有点困难,但我可以告诉您,您已经说过,您需要在编译语句中包含特定的库,而这些库当前不是。此外,-l标志需要为您的库添加前缀。

尝试这样的事情:

gcc -lpthread main.c functions.c db.c -o main $(mysql_config --libs)

为了解释,mysql_config --libs返回在C程序中运行mysql ddl所需的所有配置库。

鉴于您对文件声明的更新,我猜你是一名Java程序员。 C不是Java。如果您要声明功能,您只需在main.c中使用一次,则应将它们放在main.c内,除非您需要它们才能移植。