我写了c程序,其中有3个文件(.c),主程序有 两个线程和一个文件有mysql连接功能,一个文件有 线程函数定义。我不知道如何编译所有这些 代码,通常我试过这样,
cc -pthread main.c
但是,如果我这样编译,我会收到名为mysql函数的错误 未定义但是我已经将线程编写为单独的程序而且 mysql作为单独的程序并单独编译,它符合 成功了,我得到了输出。所以请帮我编译一下 项目文件名是,
main.c
(声明2个线程)functions.c
(线程函数
定义,并声明mysql func)db.c
(mysql函数
定义)
请帮助编译我的代码?
答案 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
内,除非您需要它们才能移植。