返回值优化和noncopyable class

今天上班,遇到件比较有意思的事情。有同事叫我看一段代码,这段代码在gcc上可以编译通过,但是用bullseye cover编译用于统计覆盖率的时候,链接阶段报错了。

我简化一下这段代码如下:

class Integer
{
public:
    Integer(int x=0):_x(x){}
    Integer operator+(const Integer& rhs)
    {
        Integer tmp;
        tmp._x += rhs._x;
        return tmp;
    }
    ~Integer(){}
private:
    Integer(const Integer&);
    int _x;
};

我看了一下bullseye cover链接阶段报的错误,其实就是说找不到"Integer(const Integer&)"函数的定义,而这个函数在"Integer operator+(const Integer& rhs …

more ...

使用静态库链接程序

先关注两个gcc编译选项:

  1. -c 编译且汇编,但是不链接
  2. -S 只编译,不汇编也不链接

-c选项产出的就是经常看到的.o文件,也是一般用来创建静态库的文件。

用如下的命令可以将多个.o文件打包为一个静态库文件:ar crs libtest.a src/test1.o src/test2.o

现在完成了静态库创建工作,我们怎么在链接一个可执行程序的时候使用这个静态库呢? 有三种方式:

  1. gcc -o test main.c libtest.a
  2. gcc -o test main.c –ltest –L./
  3. gcc -o test main.c -Xlinker "-(" libtest.a -Xlinker "-)"

其中一、二其实是同一种使用方式 …

more ...