喜 任何人都可以帮我这个代码。我是c ++的新手
#include <stdio.h>
#include<iostream>
using namespace std;
namespace manish
{
double mean(double a, double b);
}
double mean(double a, double b)
{
return (a+b) / 2;
}
我想为此创建一个静态库,我使用该命令 g ++ calc_mean.cpp -o mean.o 它给了我以下错误
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
谁能告诉我我做错了什么?
或者如何为函数创建命名空间,以便可以使用其名称空间在其他地方使用它
答案 0 :(得分:9)
这与名称空间无关。如果你想编译而不是链接,你必须为gcc提供-c
选项:
g++ -c calc_mean.cpp -o mean.o
您得到的错误是因为g ++正在尝试创建一个可执行程序(您没有告诉它),您需要为其定义标准入口点:main
。
在一个命名空间中声明mean
并在全局命名空间范围内定义另一个mean
没有任何内在错误,尽管在这种情况下第一个声明未使用,因此没有任何效果。
要从生成的对象文件创建静态库,您需要使用存档实用程序(ar
)。 E.g:
ar rcs libmean.a mean.o
答案 1 :(得分:1)
使用g++ -c
选项构建,告诉gcc不要调用链接器,因为您正在构建库并且无需链接。
答案 2 :(得分:0)
main是程序加载时调用的函数。你告诉编译器创建一个程序,在运行时将有一个主函数。
将此添加到您的代码
void main(){
printf("My program has started");
}
此外,您已声明了一个名为manish :: mean的函数(manish namespace中的函数),但您已在全局名称空间中提供了函数均值的代码:: mean
你应该尝试这样的事情:
#include <stdio.h>
#include<iostream>
using namespace std;
namespace manish
{
double mean(double a, double b);
double mean(double a, double b)
{
return (a+b) / 2;
}
}
void main(){
double result = manish::mean(2.0, 4.0);
printf("My program has started - the result is %f", result);
}
答案 3 :(得分:0)
您正在使用-o这意味着编译器希望文件创建一个完整的程序。但是,完整的程序必须包含main()函数。你应该使用:
g++ -c calc_mean.cpp
如果您没有主要功能。