我正试图在我的windows机器上编译一个简单的单元测试。当我试图编译我的测试时,我使用的是共享库标志。
gcc -c -L./bin/ -lcmocka .\Test.c .\src\some_module.c
gcc .\Test.o .\some_module.o -o main但是第二行抛出了这个错误:
undefined reference to `_cmocka_run_group_tests'但是,如果我直接使用从他们的git下载的cmocka.c文件进行编译,它工作得很好:
gcc -c .\lib\cmocka.c .\Test.c .\src\some_module.c
gcc .\Test.o .\some_module.o .\cmocka.o我在第一次编译中做错了什么?此外,我很高兴了解这两个编译之间的差异。哪个是更好的实践?
谢谢
发布于 2021-11-17 14:11:59
为了编译代码,编译器不需要知道在哪里查找库。只要编译器“找到”函数的声明就足够了,这些声明通常位于库提供的头文件中。
此步骤在编译过程的第一行中完成(可能需要通过添加-Ipath/to/headers/来指定头文件的文件夹):
gcc -c .\Test.c .\src\some_module.c库本身在链接步骤中与代码“结合”,这是在第二个编译步骤中完成的。在这里,您需要指定库(如果链接器没有自己找到库,还需要通过-Lpath/to/library指定它的路径):
gcc .\Test.o .\some_module.o -o main -L./bin/ -lcmocka 你绝对不应该使用你的第二种方法,自己编译这个库。
https://stackoverflow.com/questions/70005790
复制相似问题