【问题标题】:Unresolved External Symbol while trying to use bit7z library C++ / Qt尝试使用 bit7z 库 C++/Qt 时未解析的外部符号
【发布时间】:2022-10-09 17:31:50
【问题描述】:

我一直在尝试安装 bit7z 并将其正确链接到我的 C++ 代码中,因为我必须为我的实习做一项任务,即自动压缩某个目录并将压缩文件作为电子邮件发送出去。现在这封电子邮件对我来说并不有趣,因为我什至无法获得基本程序。我只是不断收到 Linker Error 2019,我不知道该怎么办了。我会提供尽可能多的信息。
我使用 Visual Studio 2019。

我的简历:

TEMPLATE = app
TARGET = aixLogger
DESTDIR = ./Debug
CONFIG += debug console
DEPENDPATH += .
MOC_DIR += .
OBJECTS_DIR += debug
UI_DIR += GeneratedFiles
RCC_DIR += GeneratedFiles

LIBS += -D:/local/aretz/Programmierung/git-workplace/aixLogger/Dependencies/bit7z/lib -lbit7z
INCLUDEPATH += D:/local/aretz/Programmierung/git-workplace/aixLogger/Dependencies/bit7z/include

include(aixLogger.pri)

我的.h

#pragma once
#include <qwidget.h>
#include <qobject.h>
#include <bit7z.hpp>

class AIXLogger : public QWidget
{
    Q_OBJECT
public slots:

public:

    void CompressDir();
    void Execute();
};

我的.cpp

#include <QCoreApplication>
#include <string>
#include <iostream>
#include <filesystem>
#include <bit7z.hpp>
#include "main.h"
#include "bitcompressor.hpp"

namespace fs = std::filesystem;
using namespace bit7z;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    std::string path = "C:/Users/aretz/Downloads/test";
    for (const auto& entry : fs::directory_iterator(path))
    std::cout << entry.path() << std::endl;

    //return a.exec();
}

void AIXLogger::CompressDir() {
    try {
        Bit7zLibrary lib{ L"C:/Program Files/7-Zip/7z.dll" };
        //BitCompressor compressor{ lib, BitFormat::Zip };

        std::vector< std::wstring > files = { L"aretz/downloads/test/test1.txt", L"aretz/downloads/test/test1.txt" };

        //Zip Archiv erstellen
        //compressor.compress(files, L"output_archive.zip");

        //Directory zippen
        //compressor.compressDirectory(L"dir/path/", L"dir_archive.zip");

    }
    catch (const BitException& ex) {
        //irgendwas mit &ex machen
    }
}

void AIXLogger::Execute() {

    CompressDir();
}

我还添加了我更改的属性的图片。
Additional Dependencies
Additional Library Directories
Additional Include Directories

编辑:这是我仅使用“Bit7zLibrary lib {L”C:/Program Files/7-Zip/7z.dll”}这行得到的实际错误;:

错误 LNK2019 无法解析外部符号“public: __thiscall bit7z::Bit7zLibrary::Bit7zLibrary(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const &)” (?? 0Bit7zLibrary@bit7z@@QAE@ABV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@Z) 在函数“public: void __thiscall AIXLogger::CompressDir”中引用(void)" (?CompressDir@AIXLogger@@QAEXXZ) aixLogger D:\local\aretz\Programmierung\git-workplace\aixLogger\main.obj 1

严重性代码 描述 项目文件行抑制状态 错误 LNK2019 未解析的外部符号“public: virtual __thiscall bit7z::Bit7zLibrary::~Bit7zLibrary(void)” (??1Bit7zLibrary@bit7z@@UAE@XZ) 在函数“public: void __thiscall AIXLogger::CompressDir(void)”中引用(?CompressDir@AIXLogger@@QAEXXZ) aixLogger D:\local\aretz\Programmierung\git-workplace\aixLogger\main.obj 1

【问题讨论】:

    标签: c++ qt5 visual-studio-2019 7zip


    【解决方案1】:

    您遇到的问题是链接器找不到 bit7z 静态库。

    默认情况下,bit7z 库构建为bit7zin$(PlatformShortName),其中$(PlatformShortName)x86x64,具体取决于您的目标架构。

    但是,您指定了不同的库目录 (bit7zlib),这是错误的(除非您更改了输出构建库的目录)。

    您可以通过将路径更改为$(SolutionDir)Dependenciesit7zin$(PlatformShortName) 来修复它。

    另外,请注意,在 x86 上,默认库名称只是 bit7z.lib,而在 x64 上是 bit7z64.lib

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2012-11-19
      相关资源
      最近更新 更多