是的,以前有人问过这个问题,但是我在 SO 和其他地方提出的每个答案都与在 gcc 而不是 g++ 中编译 C++ 代码有关,或者与标准库的某种问题有关。到目前为止,这里没有任何东西真正适合我。
因此,我正在学习 C 语言的基本速成课程,并尝试编译一个示例,用于说明链接到您创建的文件,而不是来自标准库的文件。这是代码:
数学函数.h
int sum (int x, int y);
float average (float x, float y, float z);
math_functions.c
int sum (int x, int y)
{
return (x + y);
}
float average (float x, float y, float z)
{
return (x + y + z) / 3;
}
最后
test3.c
#include <stdio.h>
#include "math_functions.h"
main ()
{
int theSum = sum (8, 12);
float theAverage = average (16.9, 7.86, 3.4);
printf ("the sum is: %i ", theSum);
printf ("and the average is: %f \n", theAverage);
printf ("average casted to an int is: %i \n", (int)theAverage);
}
这些都在同一个文件夹中。当我打开终端时,cd 到该文件夹并运行:
gcc test3.c -o test3
I get:
Undefined symbols for architecture x86_64:
"_average", referenced from:
_main in ccmf69Tt.o
"_sum", referenced from:
_main in ccxms0fF.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
如果我使用 gcc 或 g++ (我不应该这样做,因为这都应该是 C),就会发生这种情况,并且我之前编译的所有内容现在都可以很好地使用
#include <stdio.h>
在顶部。
我可以通过删除它来编译并正常运行
#include "math_functions.h"
来自test3.c文件,将内容数学函数.h在 main() 之前和内容math_functions.c在 main() 之后。是的,这就是复制和粘贴,所以它绝对是相同的代码。
是的,我可以让我的代码工作,但它违背了练习的目的,因为我最终无法在任何其他 C 文件中使用该代码,而不将其复制并粘贴到一个文件中。 ..
所以我想知道,有没有办法可以解决这个问题,这样我就可以包含更多内容,而不仅仅是标准 C、C++ 和 Objective-C 库?
这是通过打开终端框、手动输入 gcc 命令以及通过 CodeRunner 来实现的,CodeRunner 将标准命令全部隐藏在一个按钮中,所以我无法填充它。
我正在 2012 Mac Mini 上运行 Mountain Lion 10.8.4 (12E55),使用 Xcode 4.6.2 中的命令行工具(几个小时前安装的,实际上我并没有对 Mini 进行标准使用)直到现在)
我在 MacBook Air 上安装了所有相同的软件,但尚未对其进行测试以查看是否有相同的问题。
有什么指点吗?如果其他人已经遇到过这个问题并在此处的某个地方解决了这个问题,请指出它,我已经寻找了大约一个小时,但就像我之前所说的,到目前为止我找到的所有解决方案最终都在那里是 C++ 代码还是标准库中的一些奇怪的东西。