c ++命名空间问题

时间:2011-03-17 07:27:00

标签: c++ g++ static-libraries

喜 任何人都可以帮我这个代码。我是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'
谁能告诉我我做错了什么? 或者如何为函数创建命名空间,以便可以使用其名称空间

在其他地方使用它

4 个答案:

答案 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

如果您没有主要功能。