用c语言编译多个源文件

用c语言编译多个源文件,c,makefile,C,Makefile,我已经写了c程序,其中有3个文件(.c),主程序有 两个线程和一个文件具有mysql连接功能,一个文件具有 线程函数定义。我不知道如何编译所有这些 密码,通常我是这样试的 cc -pthread main.c 但如果我像这样编译,我会得到一个名为mysql函数的错误 未定义,但我已将线程作为单独的程序和 mysql作为一个单独的程序,单独编译,它编译了 成功,我得到了输出。所以请帮我编译我的 项目文件名为 main.c(声明了2个线程)functions.c(线程函数 定义,并声明mysql

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

cc -pthread main.c 
但如果我像这样编译,我会得到一个名为mysql函数的错误 未定义,但我已将线程作为单独的程序和 mysql作为一个单独的程序,单独编译,它编译了 成功,我得到了输出。所以请帮我编译我的 项目文件名为

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


请帮助编译我的代码?

要准确理解您需要什么有点困难,但我可以从您所说的内容中告诉您,您需要在您当前没有的编译语句中包含特定的库。此外,a-l标志需要为库添加前缀

试着这样做:

gcc -lpthread main.c functions.c db.c -o main $(mysql_config --libs)
为了说明这一点,
mysql\u config--libs
返回在C程序中运行mysql ddl所需的所有配置库


鉴于您对文件声明的更新,我猜您是一名Java程序员。C不是Java。如果您要在
main.c
中声明一次函数,则应将其放入
main.c
中,除非您需要可移植。编译多个.c文件时,您有两个基本选项:

备选方案1)

cc file1.c file2.c file3.c-o可执行文件名称

优点:简单

缺点:如果您只更改了一个文件,那么您正在重新编译所有文件

备选方案2)

优点:如果更改一个文件,则不必重新编译所有文件

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


-c
标志告诉编译器执行以下操作。您不想链接,因为您尚未编译所有文件。最后调用
cc
将所有
.o
文件链接到可执行文件
executable\u name

欢迎使用堆栈溢出!请澄清您的具体问题或添加其他详细信息,以突出显示您所需的内容。正如目前所写的,很难(读作不可能)准确地说出你在问什么。请参阅页面以获取澄清此问题的帮助。如果您试图组合三个单独的程序,每个程序分别编译和(您暗示)运行,则应重新构造代码,并使用
.h
头文件共享它们的定义。构成整体一部分的模块文件不太可能单独编译和运行。此外,请使自己习惯于不仅提供重要的细节,而且不要用无用的细节添加噪音。例如,你的程序有两个线程或者一个线程使用mysql等等,这完全不重要。你会发现,当你充分考虑你的问题以创建一个简洁恰当的问题时,你会更好地了解你自己的情况。他有两个额外的源文件
functions.c
db.c
。虽然他可以简单地将这些添加到您给他的单一命令中,并且可能会链接,但从长远来看,这不是一个有用的建议。在我发布答案后,他编辑添加了两个额外的源文件。现在更新谢谢你们的帮助,但我已经尝试了上面的编译方法。如果有任何方法可以使用make file????
 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