gpt4 book ai didi

使用 gcc 编译所有必需的文件

转载 作者:行者123 更新时间:2023-12-02 10:40:55 25 4
gpt4 key购买 nike

我对 C 和 gcc 编译器还很陌生。我有一个项目,其中包含一些其他 .h 文件。在该文件中包含来自更多自己的 .h 文件。等等。它包含相当数量的内容。我的问题是,当我尝试编译主文件时:

gcc -o test tests_main.c

我收到以下错误:

Undefined symbols for architecture x86_64:
"_waves_secure_hash_test", referenced from:
_crypto_tests in tests_main-d1ae56.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

那是因为编译器找不到方法“waves_secure_hash_test”,但它在包含的文件中:

#include "crypto_tests.h" 

所以,我搜索了一下,找到了一个解决方案,只需编译它:

gcc -o test tests_main.c crypto_tests.c

好的,这两个测试文件对我有用,其中的功能只是一些测试打印。对于包含大量包含的完整项目,我无法写下所有要编译的 c 文件...有没有办法告诉编译器他必须编译所有需要的和包含的文件?

最佳答案

您混淆了包含文件(.h 文件、头文件)和源文件(.c 文件)。您不必对头文件做任何事情,编译器会自动处理它们(1)

确实必须列出您要编译的所有源文件。它们定义了您的项目。不过,根据您的源代码树组织,您可能会使用 shell 模式扩展(例如 *.c)来获取它们。

对于较大的项目,您通常不会手动键入编译命令,而是使用一些项目管理工具,例如 IDE、Makefile 或构建系统生成器(例如 CMake)。

另请注意,您实际遇到的错误不是编译器 错误,而是链接器 错误。链接是编译之后的一个单独步骤。编译读取源文件并生成目标文件。然后链接会读取目标文件并从中生成二进制文件(可执行文件或共享库)。

您还应注意,头文件和源文件之间并不总是 1:1 的对应关系。典型的例子是库:您可以包含一个或多个随外部库一起提供的头文件;这些将为该库中实现的函数提供声明。这允许您调用代码中的函数。然后要使这些函数对链接器可用(以便它们可以成为您程序的一部分),请指示链接器将库链接到您的二进制文件(通常通过 -l 命令行选项)。


(1) 您可能仍然需要将编译器指向这些头文件所在的目录,这通常使用 -I 命令行选项来完成。

关于使用 gcc 编译所有必需的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56043134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com