我是C ++的初学者并使用unix。所以这是我的问题。
我在main-function中写了几行,我需要一个在c_lib库中定义的函数。
main.cpp中:
#include <iostream>
#include "c_lib.cpp"
int main()
{
return 0;
}
我想在终端上执行它,所以我写了
g++ -c c_lib.cpp
g++ -c main.cpp
g++ -o run c_lib.o main.o
在此之前,没有错误报告。
然后
./run
我收到错误
错误:./ run:没有这样的文件或目录
怎么了?
答案 0 :(得分:5)
通常不会包含.cpp
,通常只包含标题。标头通常包含定义另一个.cpp
中代码的接口的声明
你能告诉我们c_lib的来源吗?这可能有所帮助。
由于c_lib的源是#include
d,因此无需单独编译它。事实上,这可能/将导致错误(首先要考虑多个定义)。你应该只需要这样做:
g++ -o run main.cpp
在这种情况下编译代码。
(使用标题(.h
)时,您需要单独编译实现(.cpp
)
开启警告时编译:
g++ -Wall -Wextra -o run main.cpp
如果您的代码出现问题,您将获得更多输出。
gcc是否输出了run
文件?您可以通过在终端中调用ls
进行测试(或ls run
仅显示可执行文件(如果存在)。
如果存在可执行文件,则可能是它未被标记为可运行。如果它是一个问题,我将进入该问题,因为它超出了网站的一般范围(虽然仍然相关)
答案 1 :(得分:0)
首先,您不应将源文件包含在其他来源中。您应该创建一个头文件并在其中放置声明(允许main()
从c_lib.cpp调用函数或使用全局变量,如果有的话)
当您运行g++
时,如果操作成功与否,您必须查看其输出。在您的情况下,它失败,因此未创建可执行文件run
。
通常您不会手动调用编译器,而是编写makefile
并让make
实用程序调用{{1}}。