【发布时间】:2021-11-27 13:52:24
【问题描述】:
我有这些文件:-
/lib
kernel.hpp
kernel.cpp
main.cpp
当我使用时
gcc -m32 -c main.cpp -lstdc++ -o main.o -llib/kernel.hpp
它说
[function name]([type of argument 1], [type of argument 2]) is not declared in this scope
如何解决?
【问题讨论】:
-
你想使用类似 `gcc -m32 -c main.cpp -o main.o -Ilib' 来将 main.cpp 编译成 main.o。然后,您需要一个不同的命令来将 main.o 与您需要的所有其他内容(kernel.o、libstdc++)链接起来。你得到的命令很混乱。您了解编译和链接之间的区别吗? (这里不是刻薄,这是一个诚实的问题)
-
@user888379 ,当我整理我的内核源代码时,我注意到来自外部用户制作的库的函数无法识别。我需要解决这个问题。就这样。我明白你不是在这里刻薄。我确实理解编译和链接之间的区别。
-
所以,kernel.hpp 是一个头文件,是 main.cpp 编译所必需的。这就是为什么我建议使用 -I 标志来编译 main.cpp。编译 main.o 时无需担心链接器标志。 kernel.cpp 也需要被编译,提供 kernel.o、libkernel.a 或 libkernel.so。让我们保持简单,说你有一个 kernel.o。然后,您可以将 main.o kernel.o 和您的 main 所需的任何库链接在一起。
-
请注意,我使用的是 c++,具有函数重载。
-
或者至少告诉我如何让 gcc 更改重载函数的名称。因为名称在 kernel.o 中发生了变化