首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将pimpl样式类定义编译并链接到库(C++)中

将pimpl样式类定义编译并链接到库(C++)中
EN

Stack Overflow用户
提问于 2016-10-11 15:12:08
回答 1查看 209关注 0票数 1

我有一个类,我使用它,我试图重写它,所以它使用pimpl成语作为练习。但是,我现在很难编译和链接这个程序。我有一个主文件夹,其中包含一个名为data的文件夹,其中声明了类Data的pimpl实现。此文件夹再次包含一个实现类dataimpl的文件夹DataImpl。这棵树

代码语言:javascript
复制
├── data
│   ├── dataimpl
│   ├── lib

Data给出的

代码语言:javascript
复制
#ifndef INCLUDED_DATA_
#define INCLUDED_DATA_

#include "dataimpl/dataimpl.h"

class Data
{
    DataImpl * pimpl; // Only internal variable

public:
    Data();
    bool read();
    void display() const;
};

#endif

我可以创建这样的可执行文件

代码语言:javascript
复制
g++-6 main.cc data/*.cc data/dataimpl/*.cc -std=c++14

而且效果很好。但是,我想首先在文件夹Data中为data/lib类创建一个库文件。为此,在文件夹data中,我使用以下命令

代码语言:javascript
复制
g++-6 -c *.cc
ar -rsv lib/libdata.a
ranlib lib/libdata.a 

然后我将main.cc的对象文件编译为

代码语言:javascript
复制
g++-6 -c main.cc 

现在我想把这整件事联系起来

代码语言:javascript
复制
g++-6 -o exec main.o data/lib/libdata.a data/dataimpl/*.cc

我得到了错误信息

代码语言:javascript
复制
main.o: In function `main':
main.cc:(.text+0x26): undefined reference to `Data::Data()'
main.cc:(.text+0x3a): undefined reference to `Data::read()'
main.cc:(.text+0x7d): undefined reference to `Data::display() const'
collect2: error: ld returned 1 exit status

当我在链接时将库文件添加到搜索路径时,我不明白为什么Data函数会提供未定义的引用。如果找不到DataImpl函数,这对我来说是有意义的,但我也添加了这些搜索路径(实现在data/dataimpl中,并具有.cc扩展)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 16:18:14

您的ar命令

代码语言:javascript
复制
ar -rsv lib/libdata.a

应该是

代码语言:javascript
复制
ar -rsv lib/libdata.a *.o

否则,您将创建一个空的归档文件。顺便说一句,您应该熟悉linux命令'nm‘,它显示符号。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39980617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档