为啥编译时出现cannot find lz错误,怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥编译时出现cannot find lz错误,怎么解决相关的知识,希望对你有一定的参考价值。

编译时出现cannot find lz错误,是设置错误造成的,解决方法如下:

1、首先在使用angular-cli开发处理Base64,出现了编译错误【error TS2304: Cannot find 】。

2、首先终端执行命令【npm i -g typescript@next】安装成功后继续执行命令【npm i --save-dev @types/node】。

3、然后在需要的Ts文件头。

4、引用【import Buffer from 'buffer';】。

5、然后查看编译结果,就不会在提示编译错误了。

参考技术A 一、编译链接的问题 ,主要的原因是库文件并没有导入的ld检索目录中。

二、解决:
需要安装zlib-dev这个包:
1)在线安装命令为:apt-get install zlib1g-dev。
2)在线安装命令为:yum install zlib-devel。如果需要管理员权限,建议在上述命令前加sudo。
参考技术B 是编译链接的问题 cannot find -lz 吗? 如果是的话,看这个办法:

./configure .............参数.......................完了后

执行

make LIBS="libz.so.1.2.3 libz.a"

make install

将libz.a拷贝到/usr/lib/目录下

ldconfig -v本回答被提问者和网友采纳
参考技术C 是编译链接的问题 cannot find -lz
./configure .............参数.......................完了后.
执行
make LIBS="libz.so.1.2.3 libz.a".
make install.
将libz.a拷贝到/usr/lib/目录下.
ldconfig -v.
提示缺少vpath.c这个文件。或者别的
你下载的源码不全。或者configure文件有问题
你试着在终端下输入find / -name "vpath.c"看看能不能找到.
参考技术D 我也有类似的问题。1G的组棒接读卡器,在pc上用wbsf_win init后灌了一个linkcross一切正常。用一个西数80G影片,同样在pc上init灌了link和RE4,接在wii上显示无游戏,真是郁闷。另外我的wii用usbl1.1还无法直接向硬盘灌,提示非wii碟(机器:3.1j+d2c,安装了rev9)

为啥我在使用模板函数时出现编译错误

【中文标题】为啥我在使用模板函数时出现编译错误【英文标题】:Why do i get compile error while using template function为什么我在使用模板函数时出现编译错误 【发布时间】:2020-07-17 11:52:03 【问题描述】:

我有一个基类。

#include <string.h>
class Channel

private:
    std::string stdstrName;

public:
    Channel() : stdstrName("CHANNEL")   
    Channel(std::string name) : stdstrName(name) 
    void PrintName()  std::cout << stdstrName << std::endl;   
;

由 Position 类继承。

class PositionChannel : public Channel

public:
    std::vector<int> keyframes;
    PositionChannel() : Channel("POSITION") , keyframes(  1 , 2, 3 )     
;

有一个导演类,它的数据成员是频道类。

#include "Channel.h"
#include <memory>

class Director

private:
    std::vector<std::shared_ptr<Channel>> channels;

public:
    void AddChannel(std::shared_ptr<Channel> chn)  channels.push_back(chn); 
    void GetChannel(Channel **chn)  *chn = channels[0].get();    
;

现在在主函数中。

 // Free function
 template<typename T>
    void GetChannel(Director *dir)
    
        T *chn;
        dir->GetChannel(&chn);
    

    Director dir;
    PositionChannel channel;
    std::shared_ptr<Channel> channelPointer = std::make_shared<Channel>(channel);
    dir.AddChannel(channelPointer);
    GetChannel< PositionChannel>(&dir); // here i get error  

这是错误消息 error C2664: ' cannot convert argument 1 from 'T **' to 'Channel **

如果我将模板函数更改为非模板函数,则不会出现任何错误。

【问题讨论】:

“取消模板化”GetChannel 使用 PositionChannel* chn; 也不起作用。问题的一个最小示例是int main() PositionChannel* pc; Channel** c = &amp;pc; 就像你做的一样:PositionChannel* chn; dir.GetChannel(&amp;chn);。那样有用吗?没有。 【参考方案1】:

在你GetChannel调用中,&amp;chn参数的类型是PositionChannel**,但是Director::GetChannel参数的类型是Channel**。这两种类型不可兑换;例如,请参阅这个问题:Conversion of pointer-to-pointer between derived and base classes?。

我不确定你的意图是什么,因为代码没有多大意义,但你可以重新定义GetChannel,如下所示:

template<typename T>
void GetChannel(Director *dir)

  Channel* ptr;
  dir->GetChannel(&ptr);
  T *chn = ptr;

【讨论】:

【参考方案2】:

T 可以是任何类型,您不能将其转换为任何类型的Channel

可能有一些方法可以使其与模板一起使用,但我觉得通过使用多态性可以更轻松地解决您的问题:

void GetChannel(Channel* chn, Director *dir)

    dir->GetChannel(&chn);

然后chn 可以是从Channel 派生的任何类型。

【讨论】:

OP不想将任何类型转换为Channel,而是Channel的子类。 我猜,但这是同样的问题。 T 太通用了,不能按原样使用,不是吗? @ShadowMitia 是的,我可以在没有非模板函数的情况下做到这一点,但想检查这是否可以通过模板完成。 @Summit 对,有点误解了你的问题。我敢肯定有办法做到这一点,但我不会知道他们^^ @Summit 非模板版也不行:godbolt.org/z/v69hjE【参考方案3】:

是的,Daniel Langr 已经给出了正确答案。如果类是派生的,我在模板中添加了一个检查。

#include <type_traits>
class Channel
 
    public:
    virtual ~Channel() = default;
;

class PositionChannel : public Channel
 
;

struct Director
    void GetChannel(Channel **c) 
;
 
template <typename T,
typename = typename std::enable_if<std::is_base_of<Channel, T>::value, T>::type>
void GetChannel(Director *dir)

    Channel *chn;
    dir->GetChannel(&chn);
    T* ptr = static_cast<T*>(chn);


int main(void) 
    Director dir;
    GetChannel<PositionChannel>(&dir);
    return 0;

【讨论】:

以上是关于为啥编译时出现cannot find lz错误,怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

/usr/bin/ld: cannot find -lz

PyQt5 Pyinstaller时出现错误Cannot find PyQt5 plugin directories

Ubuntu下PHP动态编译出现Cannot find autoconf的解决方法

centos yum安装时出现 cannot find a valid baseurl for repo: addons

CentOS 6.7 编译PHP7 make时出现错误:undefined reference to `libiconv_close’

vue启动项目时出现的错误Error: Cannot find module 'D:\node_modules\npm\bin\npm-cli.js'