我有两个C文件,program.c
和tests.c
,每个文件都包含一个main
函数。
program.c
是一个独立程序,可以独立编译并正常运行。但我也希望能够在tests.c
中使用其某些功能(无需使用公共头文件)。有办法吗?
如果我将想要的功能原型从program.c
插入tests.c
并使用:
gcc -o program.o -c program.c
gcc -o tests.o -c tests.c
gcc -o tests tests.o program.o
我得到一个错误duplicate symbol _main
,由于确实有两个“主要”功能,所以我可以理解。
我基本上希望能够将program.c
既作为独立程序又作为库,与使用if __name__ == '__main__'
在Python中完成的工作类似。
答案 0 :(得分:1)
如果您需要具有两个单独的不同的可执行文件,它们之间的某些功能相似,则可以通过将相关功能放入第三个文件并编译为便携式可执行文件来共享通用功能。 ,在Windows中为DLL。 (或Linux中的shared library。)这些文件类型中的每一个都包含可共享的可执行代码,而没有main()
函数,这些代码旨在在编译时链接,并在运行时动态加载到可执行文件中。>
这是shared library using GCC and Linux的逐步说明。
这是创建DLL using GCC in windows的分步示例。
答案 1 :(得分:0)
由于@pmg的评论,我设法实现了想要的目标:
我将program.c编译为独立的二进制文件(gcc -o program program.c
),但是我也将其编译为目标文件,并将其“ main”重命名为(gcc -c -Dmain=mainp -o program.o program.c
)。 / p>
然后我可以使用此目标文件(不再包含“ main”符号)来编译测试。c:gcc -o tests tests.c program.o
。
感谢@pmg,我不知道对-D选项的使用。